考慮這個簡單的代碼:如何做到真正的只讀屬性(存取=> attributs)
class Yeah
attr_reader :foo
attr_reader :fool
attr_reader :feel
def initialize(foo: "test", fool: {}, feel: [])
@foo = foo
@fool = fool
end
end
test = Yeah::new
pp test
test.fool[:one] = 10
pp test
輸出:
#<Yeah:0x000008019a84a0 @foo="test", @fool={}>
#<Yeah:0x000008019a84a0 @foo="test", @fool={:one=>10}>
我的問題是,有一個 「簡單」, 「乾淨」方式,讀取accesors真正的只讀數組,哈希attributs或我需要繼承數組或哈希很多難以寫入鎖定,(undef,別名)或使用代理,委託或其他模式是這樣的?
標準ruby中沒有隻讀數組或哈希。 –
非常好的問題雖然(* + 1 *) –
我想說,在任何情況下,我爲字符串讀取器或寫入器創建存取器都有一個意義,當您嘗試執行obj.accessor =您有很好的異常,對於散列或者數組在每種情況下我都使用[]來訪問,並且沒有什麼可阻止的,但是使用freeze的解決方案似乎很好,謝謝! – Romain