小编sin*_*ony的帖子

Ruby - 检查block_given之间有什么区别?和!block.nil?

我有一个ruby方法需要检查块是否传递给它.一位同事建议只检查block.nil?性能是否稍微快一点,并且适用于命名块.这已经非常烦人,因为他正在使用命名块并使用它来调用它block.call而不是yield显示更快,因为命名块在可读性方面更容易理解.

版本1:

def named_block &block
   if block.nil?
     puts "No block"
   else
     block.call
   end
end
Run Code Online (Sandbox Code Playgroud)

版本2:

def named_block &block
  if !block_given?
    puts "No block"
  else 
    block.call
  end
end
Run Code Online (Sandbox Code Playgroud)

基准测试显示版本1比版本2略快,但是快速查看源代码似乎表明它block_given?是线程安全的.

这两种方法有哪些主要区别?请帮我证明他错了!

ruby performance ruby-block

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

标签 统计

performance ×1

ruby ×1

ruby-block ×1