gpt4 book ai didi

ruby - 为什么我可以在没有 attr_writer 的情况下设置哈希属性?

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

如果我理解正确的话,Ruby 允许设置实例属性只有当它们声明为可写时(例如通过 attr_writerattr_accessor 或自定义 setter 方法)。我注意到我可以在没有显式编写器方法的情况下设置哈希属性:

class HashSetter
attr_reader :hash

def initialize
@hash = {}
end

def set_hash
self.hash[:message] = 'haha'
end
end

obj = HashSetter.new
obj.set_hash
puts obj.hash
# -> {:message=>"haha"}

正如预期的那样,如果我使用“常规”变量而不是散列,则相同的代码将无法工作:

class VarSetter
attr_reader :var

def initialize
@var = nil
end

def set_var
self.var = 10
end
end

obj = VarSetter.new
obj.set_var
# ->
# check_accessors.rb:26:in `set_var': undefined method `var=' for #<VarSetter:0x00000001cba510 @var=nil> (NoMethodError)

为什么允许我在第一段代码中设置 :hash 属性?

最佳答案

在您的第一个示例中,您没有设置 hash 属性,您实际上是在获取属性(使用属性读取器)并调用 []= 方法它。如果没有 attr_writer,您不能做的是直接分配给 self.hash,即您不能编写 self.hash = {} code>,这就是你在第二个例子中出错的原因。

关于ruby - 为什么我可以在没有 attr_writer 的情况下设置哈希属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647623/

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