如何测试块是否为空?

scr*_*rrr 8 ruby lambda block

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

Mic*_*ohl 9

sourcify宝石增加了一个Proc#to_source方法:

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

一旦你将块作为字符串,就可以很容易地看到花括号之间是否有(或只有空格).


Mar*_*une 7

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

Ruby用来比较Procs,但并不是很好.例如,您可以:

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
Run Code Online (Sandbox Code Playgroud)

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