作者godfat (godfat 真常)
看板Ruby
标题map 使用 symbol 当引数的用法
时间Mon Sep 1 01:52:05 2008
※ 引述《suomax (shadow)》之铭言:
: arr = [1, 2, 3]
: arr.map(&to_s)
^^^^^ 是 &:to_s
: # => ["1", "2", "3"]
: arr.map(&class)
^^^^^^ 是 &:class
: # => [Fixnum, Fixnum, Fixnum]
: 大概可以看出这样的语法等同於
: arr.map {|f| f.to_s} / arr.map {|f| f.class}
: 只是我不太懂为甚麽可以作这样的 shortcut?
: 这是本来就有的功能,还是可以从语法的层面解释呢?
→ suomax:自问自答 是因为 ActiveSupport 替 Symbol 加上 to_proc 09/01 01
这个答案的前提是你在 rails 里面。
ruby 碰到 & 时,会把後面的东西当成 block 丢进去。
如果他是 Proc, 则直接进去,如果不是 Proc, 则试着呼叫 to_proc.
ActiveSupport 在 Symbol#to_proc 加上的东西是把第一 argument 当
message receiver, 其余 arguments 当此 message 的 arguments.
意思就是 :to_s.to_proc['abc'] 跟 'abc'.to_s 的意思是一样的。
除了 ActiveRecord 外,Ruby Facets 也有加上这个功能。
Ruby 1.8.7 也有,Ruby 1.9 也有,Rubinius 也有,JRuby 也有...
只有 MRI 1.8.6 和之前的版本没有...
--
Nobody can take anything away from him.
Nor can anyone give anything to him.
What came from the sea,
has returned to the sea.
Chrono Cross
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18