メソッド内*
と、そこからアレイを再構築、配列の同一性が保存されていない次いで、メソッドに渡すときに、私は*
を配列スプラット:procオブジェクトは `&` -`& `roundtripの下でどのように保持されますか?
a = []
a.object_id # => 69846339548760
def bar *a; a.object_id end
bar(*a) # => 69846339537540
をしかし、私は電源を入れたときメソッドに渡すとき&
とブロックにprocが、その後、メソッド内&
でブロックからPROCを再構築、PROCのアイデンティティが維持されているようだ:
pr = ->{}
pr.object_id # => 69846339666160
def foo ≺ pr.object_id end
foo(&pr) # => 69846339666160
PROCオブジェクトが保存されている方法は?それはブロックに変換されたときに失われていないのですか?これは保証された行動ですか?
を続けなければならない。少なくともこれは、やや標準化された行動であるRubySpecのhttps://github.com/ruby/spec/blob/master/core/proc/block_pass_spec.rb
あたりとして: 'DEFバズ。 Proc.new.object_idを終了します。 p = - > {}; p.object_id#⇒9708320; baz &p ;#⇒9708320' – mudasobwa
@mudasobwaこれは特別な構文規則のためです。メソッド内でブロックなしでprocを作成する場合は、そのメソッドに渡されたprocを参照します。 – sawa
私は知っています、ありがとう。私は 'Proc.new'は実際にはコンストラクタではないことを意味しました_。 – mudasobwa