gpt4 book ai didi

ruby - attr_accessor 或自定义方法重复方法名混淆

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

我知道 Ruby 支持调用方法的简写风格,即:1.+(2)1+2 相同(我仍然认为如果它与我的情况有关),但我真的很困惑为什么 attr_accessor 方法既不重复(好吧,它们不应该重复,因为 writer= 在其名称中)在事件对象之外访问它们时它们也没有任何区别(除了 writer 需要一个参数)。

我的问题包含在此代码中(在第二条评论中)

class Test
def initialize(number)
@number = number
end
def number
@number
end
def number=(n)
@number = n
end
end

t = Test.new(12)

puts t.number # => 12
t.number = 13 # Why does it do what t.number=(13) should do
puts t.number # => 13

我想知道为什么 t.number = 13 有效,当它指向一个应该只返回一个数字的方法时,而且当 t.number=( 13) 没有被调用。

最佳答案

t.number = 13 只是 t.number=(13) 的简写,它们在 Ruby 中实际上是相同的语句。

attr_accessor :b 创建以下两个方法的等价物:

def b
@b
end
def b=(new_val)
@b = new_val
end

因此在您的代码示例中,您可以将 #number#number= 这两个方法替换为 attr_accessor :number

关于ruby - attr_accessor 或自定义方法重复方法名混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455804/

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