我正在尝试创建一个数组,其中第一个元素和最后一个元素是相同的.我希望能够这样做,而无需为数组分配名称.请考虑以下代码:
[1, 2, 3, 4].push(self[0])
Run Code Online (Sandbox Code Playgroud)
显然,这种使用self是错误的,因为它self指的是主要对象.所以,我的问题:
当我调用时.push,在其参数中如何引用正在调用的数组push?
小智 6
好吧,一个选项是使用instance_eval来self引用你正在使用的对象:
[1, 2, 3, 4].instance_eval { self.push(self[0]) }
# => [1, 2, 3, 4, 1]
Run Code Online (Sandbox Code Playgroud)
在不改变上下文的情况下执行此操作的一种方法self是使用Object#tap- 将对象生成块,然后返回对象的(新)值:
[1, 2, 3, 4].tap { |a| a << a[0] }
#=> [1, 2, 3, 4, 1]
# Or equivalently:
[1, 2, 3, 4].tap { |a| a.push(a[0]) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |