C
Charles Lowe
The one thing that bothers me about ruby is the (as i see it?) separate
namespaces for locals and functions.
Variables take precedence, but you can override and get the functional
form in 2 ways:
def x; 1; end
x = 2
x # => 2
x() # => 1
self.x # => 1
1. It seems somewhat messy, and prohibits using () as a message (eg,
sending :call)
x = proc { 1 }
x() # NoMethodError...
x[] # => 1
2a. It also leads to a more complex language to parse, and to those
interesting issues like:
def x; 1; end
x # => 1
x = 2 if false
x # => nil
2b. And other confusion as `*', '&' and '/' being mistaken at times,
with certain whitespace dependencies:
def foo1; end
foo2 = ''
foo1 / 1 # this / is division
foo1 /1 # this / starts an (as-yet unterminated) regexp.
foo2 / 1 # this / is division also
foo2 /1 # this / is also division! yet actually IRB trips up, looks
# for the rest of /, then gives a SyntaxError on
compilation.
a = [1, 2]
foo1 * a # * means splat
foo2 * b # * means multiply
I don't understand why they both just can't get along?
(ie at least in the same namespace, optionally with parsing not
dependent on the guessed type).
namespaces for locals and functions.
Variables take precedence, but you can override and get the functional
form in 2 ways:
def x; 1; end
x = 2
x # => 2
x() # => 1
self.x # => 1
1. It seems somewhat messy, and prohibits using () as a message (eg,
sending :call)
x = proc { 1 }
x() # NoMethodError...
x[] # => 1
2a. It also leads to a more complex language to parse, and to those
interesting issues like:
def x; 1; end
x # => 1
x = 2 if false
x # => nil
2b. And other confusion as `*', '&' and '/' being mistaken at times,
with certain whitespace dependencies:
def foo1; end
foo2 = ''
foo1 / 1 # this / is division
foo1 /1 # this / starts an (as-yet unterminated) regexp.
foo2 / 1 # this / is division also
foo2 /1 # this / is also division! yet actually IRB trips up, looks
# for the rest of /, then gives a SyntaxError on
compilation.
a = [1, 2]
foo1 * a # * means splat
foo2 * b # * means multiply
I don't understand why they both just can't get along?
(ie at least in the same namespace, optionally with parsing not
dependent on the guessed type).