相关疑难解决方法(0)

foo(&nil)与foo(&"不是proc")的行为有何不同?

我发现了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其他对象没有共享特殊行为的方式之一吗?

ruby null functional-programming

7
推荐指数
1
解决办法
485
查看次数

如何防止'超级'屈服

我有一个类,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.如何防止块被执行?

ruby

7
推荐指数
1
解决办法
225
查看次数

标签 统计

ruby ×2

functional-programming ×1

null ×1