當我調用一個不存在的方法時,method_missing
會告訴我方法的名稱。當我嘗試訪問尚未設置的變量時,該值僅爲nil
。Ruby是否有未定義的實例變量的method_missing等價物?
我試圖動態攔截對無實例變量的訪問,並返回一個基於被訪問的變量名稱的值。最接近的相當於PHP的__get
。 Ruby中是否有任何等效的功能?
當我調用一個不存在的方法時,method_missing
會告訴我方法的名稱。當我嘗試訪問尚未設置的變量時,該值僅爲nil
。Ruby是否有未定義的實例變量的method_missing等價物?
我試圖動態攔截對無實例變量的訪問,並返回一個基於被訪問的變量名稱的值。最接近的相當於PHP的__get
。 Ruby中是否有任何等效的功能?
沒有一個instance_variable_missing(至少我知道) 但是,爲什麼你要訪問隨機命名的實例變量呢?
如果你通過方法調用線程訪問對象的所有狀態(就像你應該那樣),那麼你就不需要這個了。
如果您正在尋找一種方法來定義魔術材料而不搞亂方法查找,您可能需要使用const_missing
。
我不認爲這是可能的Ruby中。推薦的方法是在模板中使用「user」方法而不是「@user」實例var。
這與您在外部處理Ruby對象的方式一致(''obj.user''是引用''@user''但實際上不是''@user''本身)的方法。如果您需要任何種類的具有屬性的特殊邏輯,最好的辦法就是使用方法(或method_missing),無論您是從內部還是外部訪問它。
查看我的answer to another similar question。但只是因爲你可以這並不意味着這是一個好主意。明智的設計通常可以克服對這類事物的需求,並允許您生成更具可讀性且可維護的代碼。
instance_variable_get
似乎是我所看到的(儘管我不是PHP用戶)與PHP的__get
最相近。
查看relevant Ruby source code,變量的唯一「缺失」方法是常量的const_missing
,實例變量沒有。
你知道警告和如何打開它嗎? –