我发现了heckle
[1, 2, 3].each(&nil)
Run Code Online (Sandbox Code Playgroud)
不会导致任何错误 - 它只返回一个枚举器.
相比之下,
[1, 2, 3].each(&"")
Run Code Online (Sandbox Code Playgroud)
加薪
TypeError: wrong argument type String (expected Proc)
Run Code Online (Sandbox Code Playgroud)
还有,&nil导致block_given?返回false
def block_given_tester
if block_given?
puts "Block given"
else
puts "Block not given"
end
end
block_given_tester(&nil) # => Block not given
Run Code Online (Sandbox Code Playgroud)
这不是因为NilClass实现to_proc- 我检查了RDoc.
我能理解为什么它会很好&nil,但我不确定它是如何完成的.这只是nil其他对象没有共享特殊行为的方式之一吗?
我有一个类,Duck有一个initialize方法,产生一个块:
class Duck
def initialize()
if block_given?
yield(self)
end
end
end
Run Code Online (Sandbox Code Playgroud)
和一个TalkingDuck在程序员初始化时问候程序的类.
class TalkingDuck < Duck
def initialize()
super()
puts 'I am a duck'
end
end
Run Code Online (Sandbox Code Playgroud)
当我TalkingDuck.new用块调用构造函数时,我不希望执行此块.这个:
TalkingDuck.new { puts 'Quack' }
Run Code Online (Sandbox Code Playgroud)
应该只打印I am a duck,但不能打印Quack.如何防止块被执行?