Just looking at http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9.
Nicely done!
Comment on a couple things
1) ;; instead of end
It is possible to use ;; instead of end.
(1..100).inject do |s,x|
s+x
;; # => 5050
class Foo
def foo; "foo" end
;;
Foo.new.foo # => "foo"
What's the rationle here? I'd rather have a punctutation mark for 'do'
(yes, ':' again ;-p)
(1..100).inject: |s,x|
s+x
end # => 5050
Of course could have both:
(1..100).inject: |s,x|
s+x
;; # => 5050
2) Block local variables
Used as follows:
# {normal args; local variables}
d = 2
a = lambda{|;d| d = 1}
a.call()
d # => 2
When a variable is shadowed, ruby1.9 issues a warning:
-:2: warning: shadowing outer local variable - d
Come on. This stinkos. At some point I think you have to give it up and
allow a declaration.
3) Calling Procs without #call/#[]
You can now do:
a = lambda{|*b| b}
(a)(1,2) # => [1, 2]
Note that you need the parentheses:
a = lambda{|*b| b}
a(1,2) # => ERROR: (eval):2: compile error...
I know this has been deprecated, but what causes this not to work
exactly?
4) send doesn't call private methods anymore
ruby-talk:153672 It is still possible to call them with the newly
introduced #funcall method.
class Foo; private; def foo; end; end
Foo.new.funcall(:foo) # => nil
Foo.new.send(:foo) # => ERROR: private method `foo' called for
#<Foo:0xb7e0e540>
No #funcall please, I already have enough methods to make exceptions
for in BlankSlate/BasicObject. Use #instance_send instead. Thank you.
5) Class of singleton classes
singleton class inherits Class rather than its object's class
class X;end; x=X.new; class << x; self < X; end # => true
vs. (1.8)
class X;end; x=X.new; class << x; self < X; end # => nil
Is this example backwards? I'm confused. Please confirm.
6) Class variables are not inherited
ruby-dev:23808
class A; @@a = 1; end; class B < A; @@a end # => ERROR: (eval):1:
uninitialized ...
vs.
class A; @@a = 1; end; class B < A; @@a end # => 1
Love it! Thank you!
T.