Come viene valutato Proc#==
? RDoc dice:Come viene valutato `ProC# ==`?
prc == other_proc → vero o falso
Restituisce vero se PRC è lo stesso oggetto come other_proc, o se sono entrambi procs con lo stesso corpo.
Ma non è chiaro quello che conta come avere "lo stesso corpo". Una condizione sembra essere che l'arity deve essere la stessa:
->{} == ->{} # => true
->{} == ->x{} # => false
->x{} == ->x{} # => true
->x{} == ->y{} # => true
->x{} == ->y,z{} # => false
Ma c'è di più. Come RDoc dice, il corpo conta:
->{nil} == ->{nil} # => true
->{nil} == ->{false} # => false
->{false} == ->{false} # => true
Ma allo stesso tempo, sembra che il proc non sia pienamente valutata:
->{} == ->{nil} # => false
->{false} == ->{1 == 2} # => false
Fino a che punto è il corpo valutata?
Immagino che il codice nel corpo sia lo stesso, non il risultato della sua valutazione. –
Stavo pensando che l'albero dei sorgenti analizzato debba essere identico, ma ... '-> {nil} == -> {nil; nil} # => true' O forse il primo nil viene rimosso dall'origine perché non ha alcun effetto o significato? –
Inoltre: 'a, b = -> {}, -> {}; a == b # => true', ma 'a = -> {} [newline] b = -> {}; a == b # => falso'. Nota che la nuova riga DEVE essere una nuova riga; se usi un punto e virgola, 'a' è uguale a' b'. WTF davvero. –