all*_*ode 5 ruby variable-assignment
假设您在Ruby中执行此操作:
ar = [1, 2]
x, y = ar
Run Code Online (Sandbox Code Playgroud)
然后,x == 1和y == 2.我可以在自己的类中定义一个能产生相同效果的方法吗?例如
rb = AllYourCode.new
x, y = rb
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所能完成的任务就是使x == rb和y = nil.Python有这样的功能:
>>> class Foo:
... def __iter__(self):
... return iter([1,2])
...
>>> x, y = Foo()
>>> x
1
>>> y
2
Run Code Online (Sandbox Code Playgroud)
是的.定义#to_ary.这将使您的对象被视为一个用于赋值的数组.
irb> o = Object.new
=> #<Object:0x3556ec>
irb> def o.to_ary
[1, 2]
end
=> nil
irb> x, y = o
=> [1,2]
irb> x
#=> 1
irb> y
#=> 2
Run Code Online (Sandbox Code Playgroud)
之间的区别#to_a和#to_ary是#to_a被用来尝试给定对象转换为数组,而#to_ary可如果我们可以把给定的对象数组.这是一个微妙的差异.
| 归档时间: |
|
| 查看次数: |
1498 次 |
| 最近记录: |