如何测试块是否为空?

时间:2011-08-05 12:35:32

标签: ruby lambda block

我有一段代码,我想在不运行块内部代码的情况下测试主体是否为空。这可能吗?

2 个答案:

答案 0 :(得分:9)

sourcify gem添加Proc#to_source方法:

>> require 'sourcify'
=> true
>> p = Proc.new {}
=> #<Proc:0x000001028490b0@(irb):3>
>> p.to_source
=> "proc { }"

将块作为字符串后,很容易看出花括号之间是否有(或只有空格)。

答案 1 :(得分:7)

更新:Ruby 2.0+删除了块比较,因此不再仅使用内置方法。

Ruby用于比较Proc,但是not great at it。例如,您可以:

def is_trivial_block?(&block)
  block == Proc.new{}
end

is_trivial_block?{} # => true
is_trivial_block?{ 42 } # => false
# but caution:
is_trivial_block?{|foo|} # => false

因此,决定删除块比较,因此如果它们是同一个对象,则现在有两个块==