gpt4 book ai didi

Ruby:数组的 attr_reader 类能够提供对数组值的写访问权限?

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:52 27 4
gpt4 key购买 nike

这就是 attr_readerarrays 一起工作的方式吗?

class User
def initialize
@interests = []
end
attr_reader :interests
end

u = User.new

=> #User:0x1d2cb60

u.interests << "music"

=> ["music"]

u.interests[1] = "travelling"

=> ["travelling"]

u.interests = nil

NoMethodError: undefined method `interests=' for u:User

我只是在检查自己的解释是否正确,如果不正确请指正:

attr_reader 是否阻止我分配“@interests”值,因为您没有直接修改实例变量本身(它仍然持有对数组对象的引用),但您只是在操作该数组对象引用的值?

如果那是正确的,是否有一种快速而好的方法来避免 attr_reader 给我对数组值的写访问权,但让我读取它们?

谢谢

最佳答案

关于“不直接修改实例变量”,您所描述的是正确的。 @interests 没有改变,但是因为它是一个可变对象,所以调用者可以偷偷溜到你身后。

如果您想禁止编辑 :interests 字段,只需卡住即可。时机很棘手,因为您希望在将对象交还给用户之前阻止写入,因此您可能需要在创建对象时执行此操作:

def initialize(whatever)
@foo = bar
@interests = %w(a b c).freeze
end

如果您的对象想要更改@interests,请小心。您需要完全重建数组,因为您无法解冻对象。

关于Ruby:数组的 attr_reader 类能够提供对数组值的写访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149747/

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