gpt4 book ai didi

ruby - 为什么在 Ruby 中使用数组联合运算符 |= 时必须在访问器上显式调用 self?

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

以这个类为例:

 class MyClass
attr_accessor :values, :uniq_values

def initialize(value)
self.uniq_values = ['default_value']
self.values = ['default_value']
copy_value(value)
add_value(value)
end

def copy_value(value)
uniq_values |= [value]
end

def add_value(value)
values << value
end

def run
puts "uniq_values: #{uniq_values}"
puts "values: #{values}"
end
end

obj = MyClass.new('poop')
obj.run

# Expect 'uniq_values' and 'values' to be the same
# OUTPUT:
# uniq_values: ["default_value"]
# values: ["default_value", "poop"]

我可以使用 self.uniq_values |= [value] 获得所需的输出, 但是我希望 << 是必要的运营商也是如此。谁能解释其中的区别?

最佳答案

不一样。

values << value是method calling,就是调用:<<的方法数组。

同时 uniq_values |= value只是uniq_values = uniq_values | value的捷径, 在这里 uniq_values将被解析为局部变量。

根据 documentation :

"The local variable is created when the parser encounters the assignment, not when the assignment occurs"

"When using method assignment you must always have a receiver. If you do not have a receiver Ruby assumes you are assigning to a local variable"

关于ruby - 为什么在 Ruby 中使用数组联合运算符 |= 时必须在访问器上显式调用 self?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25741976/

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