多重代入と暗黙の型変換
以前 Ruby には型変換メソッドが沢山用意されているが、あまり暗黙の型変換はしてくれないと書いた。
ところが多重代入をすると Array への型変換をやってくれるらしい。
class Foo def to_a; [:to_a] end def to_ary; [:to, :ary] end end foo = Foo.new # 左辺が複数で右辺がひとつなら to_ary が呼ばれる x, y = foo # => #<Foo:0x100b3780> x # => :to y # => :ary # 明示的に * で展開すると to_a が呼ばれる x, y = *foo # => [:to_a] x # => :to_a y # => nil # 右辺も複数あると型変換されない x, y, z = 0, foo # => [0, #<Foo:0x100b8780>] x # => 0 y # => #<Foo:0x100b8780> z # => nil # サブ代入を使うと型変換される x, (y, z) = 0, foo # => [0, #<Foo:0x100b8780>] x # => 0 y # => :to z # => :ary
多重代入はカオスだわ。