gpt4 book ai didi

arrays - ruby 使用可枚举方法为数组赋值

转载 作者:数据小太阳 更新时间:2023-10-29 08:31:14 24 4
gpt4 key购买 nike

我只是在研究 ruby​​,想知道为什么我无法使用可枚举方法(firstlast)将值重新分配给数组元素。

我知道我可以用索引赋值,但我想了解更多。我在 here 中没有找到太多解释和 here .

array1 = [1,2,3,4,5]
array1.first # returns 1
array1.first = 7
NoMethodError: undefined method `first=' for [1, 2, 3, 4, 5]:Array

Ruby 2.0

谢谢

最佳答案

这个问题有两种解读方式:

  1. 从技术上讲,为什么索引解决方案有效,但第一个 解决方案无效?

原因是为了能够使用foo.bar = :bazfoo的类必须实现bar= 方法。

class X
def initialize(y)
@y = y
end

def y
@y
end
end

x = X.new(3)
x.y # => 3
x.y = 7 # => NoMethodError: undefined method `y=' for #<X:0x007fb272726d80 @y=3>

class X
def initialize(y)
@y = y
end

def y
@y
end

def y=(new_y)
@y = new_y
end
end

x = X.new(3)
x.y # => 3
x.y = 7
x.y # => 7

核心库确实实现了Array#[]= , 但不是 Array#first=

  1. 他们决定不实现 Array#first= 的原因是什么?

first 方法实际上是 Enumberable 的一部分如果一个类实现了 first=,如果没有实现 Enumerable#first=,它看起来会不一致。

这不可能发生,因为对于某些可枚举对象来说,这种方法没有意义(Enumerator)。它还将需要更多的人来获得可枚举的功能。截至目前,要使一个类变得可枚举,它只需要实现一个 each 方法并包含 Enumerable模块。

关于arrays - ruby 使用可枚举方法为数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com