saw*_*awa 15 ruby equality proc
如何Proc#==评估?RDoc说:
prc == other_proc→true或false
如果prc与other_proc是同一个对象,或者它们都是具有相同主体的proc,则返回true.
但目前尚不清楚什么算是"同一个身体".一个条件似乎是arity必须是相同的:
->{} == ->{} # => true
->{} == ->x{} # => false
->x{} == ->x{} # => true
->x{} == ->y{} # => true
->x{} == ->y,z{} # => false
Run Code Online (Sandbox Code Playgroud)
但还有更多.正如RDoc所说,身体很重要:
->{nil} == ->{nil} # => true
->{nil} == ->{false} # => false
->{false} == ->{false} # => true
Run Code Online (Sandbox Code Playgroud)
但与此同时,看起来proc尚未得到充分评估:
->{} == ->{nil} # => false
->{false} == ->{1 == 2} # => false
Run Code Online (Sandbox Code Playgroud)
身体评估的程度如何?
这在Ruby 2.0中有所改变,所以你不应该尝试比较Procs.==除非它们是完全相同的对象,否则它们不会存在.
讨论可以在这里找到.
如果你真的需要比较两个块的代码并使用MRI,你可以RubyVM::InstructionSequence.disassemble(block)在Ruby 2.0中使用,甚至更好RubyVM::InstructionSequence.of(block).
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |