作者godfat (godfat 真常)
看板Ruby
标题[Ruby] ruby 1.9 new features
时间Thu Dec 6 01:10:40 2007
当然最有名的就是这篇文章了:
http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9
稍微试了一下感觉:
> New literal hash syntax [Ruby2]
{a: "foo"} # => {:a=>"foo"}
1.9 可用。
> Block local variables [EXPERIMENTAL]
他的 ; 隔开的 local variables 我不知道意义何在,
试了各种写法後我的结论是现在永远会 shadow outer variables...
这样就不能做一些比较 tricky 的东西,不过也好,
其实 ruby 1.8 这样的行为满容易出意外的...
> Block arguments are always local
那要那 ; 干嘛?
> New syntax for lambdas [VERY EXPERIMENTAL]
这个实在是...有点好笑啦,因为能写出很莫名其妙的 expression...
->a,*b,&c;d{c[a,b]}.(7,8){|*a|a} # => [7, [8]]
这样会没人看得懂吧 @_@b
> .() and calling Procs without #call/#[] [EXPERIMENTAL]
其实就是转呼叫 call method...
class Test
def call test
test+1
end
end
Test.new.(10) # => 11
> Blocks can take &block arguments:
finally!! 早该有的。
> News semantics for block arguments
这也是早该是这样的,就不多谈了。
> Method used for splat arguments: #to_splat
没这个东西,大概还是叫 to_a
> Multiple splats allowed
唐大师的建议? XD
非常方便的东西,简单地说就是哪里都能用 splats
[0, *[1, 2], 3, *[4, 5]] # => [0, 1, 2, 3, 4, 5]
当然 parameter 上也是,没有会让人意外的东西所以就不示范了。
> Mandatory arguments after optional arguments allowed
这是我觉得很恐怖的怪东西 :(
def f a, b=nil, *c, d
[a, b, c, d]
end
f 1,2 # => [1, nil, [], 2]
f 1,2,3 # => [1, 2, [], 3]
f 1,2,3,4 # => [1, 2, [3], 4]
f 1,2,3,4,5 # => [1, 2, [3, 4], 5]
f 1,2,3,4,5,6 # => [1, 2, [3, 4, 5], 6]
a 永远会是 第一个 arg
d 永远会是最後一个 arg
b 如果超过 2 个 arg, 则会是第二个 arg, 否则是 default value
c 永远会是剩下的全部 arg...
很复杂...。
> #instance_exec
可以传 args 的 instance_eval
> send doesn't always call private methods anymore (#__send, #__send!)
骗人,明明就可以,而且也没有 __send, __send!, send!
所以现在是维持 1.8 不改?
> Object#tap
让你把东西全部串在一起的好工具,facets 其实也有。
待续...
--
生死去来、棚头傀儡、一线断时、落落磊磊
《花镜》-世阿弥
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.58.12
1F:推 LyinZ:推! 12/06 02:30