1

以下のコードを試して、明示的なインスタンスメソッド呼び出しなしでインスタンス変数を直接割り当てることができるか、クラスの外部にできないかを確認しました。はい、以下のコードはできると言っています。

  @ubuntu:~$ irb --simple-prompt
  class Foo
  def initialize(x,y,z)
  @x, @y, @z= x, y,z
  end
  def to_ary
  [@x, @y, @z]
  end
  def to_hash
  [@x => @y]
  end
  end
  #=> nil
  foo = Foo.new(10,11,12)
  #=> #<Foo:0x00000001191738 @x=10, @y=11, @z=12>

私の質問は以下のものです:

 a,*b = foo
 #=> #<Foo:0x00000001191738 @x=10, @y=11, @z=12>
 a
 #=> 10
 b
 #=> [11, 12]

a,*bオブジェクトを作成せずにインスタンス変数からそのような割り当てを行うために、どのように、またはどの内部メソッドが呼び出されましたか?

ありがとう

4

1 に答える 1

1

Ruby インタプリタは多重代入の右辺を配列にする必要があるため、通常の手順で配列を取得します。その手順の一部はto_ary、ターゲット オブジェクトを呼び出すことです。to_aryが返され、 splat[@x,@y, @z]の動作により、結果はa = @xおよびになりb = [@y, @z]ます。

于 2013-02-19T05:05:35.847 に答える