【发布时间】:2014-01-31 01:54:42
【问题描述】:
我发现这个在 Ruby 中实现自定义 Symbol#to_proc 的示例代码:
class Symbol
def to_proc
puts "In the new Symbol#to_proc!"
Proc.new { |obj| obj.send(self) }
end
end
它包括额外的“puts ...”字符串以确保它不是内置方法。当我执行代码时
p %w{ david black }.map(&:capitalize)
结果是:
In the new Symbol#to_proc!
["David", "Black"]
但为什么不是这样呢?
In the new Symbol#to_proc!
["David"]
In the new Symbol#to_proc!
["Black"]
我的逻辑是这样的:map 产生元素一个一个地阻塞。 Block 接受第一个元素并执行 .to_proc,而不是第二个。但是为什么 puts 只执行一次呢?
【问题讨论】:
-
@bjhaid:这不是那个答案的重复。完全没有。
-
@bjhaid:嗯,是的,我会继续在这里不同意你的观点。
标签: ruby