我一直在尋找通過文檔爲instance_variable_set,看到給出的示例代碼如下:如何用instance_variable_set正確設置實例變量?
obj.instance_variable_set(:@instnc_var, "value for the instance variable")
,然後允許你訪問變量@instnc_var在任何類的實例方法。
我想知道爲什麼需要在@instnc_var
之前冒號:
。結腸是做什麼的?
我一直在尋找通過文檔爲instance_variable_set,看到給出的示例代碼如下:如何用instance_variable_set正確設置實例變量?
obj.instance_variable_set(:@instnc_var, "value for the instance variable")
,然後允許你訪問變量@instnc_var在任何類的實例方法。
我想知道爲什麼需要在@instnc_var
之前冒號:
。結腸是做什麼的?
我的第一個直覺是告訴你不要使用instance_variable_set
,除非你真的知道你在用什麼。它本質上是一種元編程工具或繞過實例變量可見性的黑客工具。
也就是說,如果沒有設置該變量的設置程序,則可以使用instance_variable_set
將其設置爲。如果你控制代碼來創建一個setter,那會好很多。
嘗試查看絕大多數實例變量設置需求的accessors。他們是一種慣用的方式,讓你的實例變量的getter和setter「免費」,而無需編寫這些函數。
如果你真的需要instance_variable_set,它允許第一個參數是一個symbol這是要設置的實例變量的名稱。冒號是Ruby語言的一部分,類似於「符號字面量」:當您鍵入:foo
時,您創建了一個帶有值foo的符號,就像直接在代碼中鍵入"bar"
一樣,您將創建一個帶有值的字符串文字「酒吧」。
這不是我使用它,它是rabl圖書館:)我只是想提交一個拉請求來解決我引用的問題,但是我不想在沒有完全知道修復工作原因的情況下提交它。 – you786
他們*使用它進行元編程,但不能改變現有的變量。他們正在創建實例變量供用戶稍後使用。另外,set_instance_variable *的第一個參數可以是一個字符串。 – you786
我剛剛發現,當通過Ruby源代碼:)編輯答案... – Matt