我尝试了下面的代码,看看我是否可以在没有任何显式实例方法调用的情况下直接在类外部分配实例变量。是的,下面的代码说我可以。
@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
进行此类赋值?
由于
答案 0 :(得分:1)
Ruby解释器需要将多个赋值的右侧作为数组,因此它通过正常的过程来获取数组。该过程的一部分是在目标对象上调用to_ary
。您的to_ary
会返回[@x,@y, @z]
,并且由于splat的行为,会产生a = @x
和b = [@y, @z]
。