回答
你可以寫一個包裝方法
def something
@var || "your default"
end
使用這個如果這是可能的,我想這對任何實例變量查找自動發生的(只是查找,分配不重要) –
,它必須被使用@不是setter –
在這種情況下,你可以使用#instance_variable_defined?
和#instance_variable_get
。例如:
class Thing
def method_missing(method, *args, &block)
ivar_name = "@#{method}".intern
if instance_variable_defined? ivar_name
instance_variable_get ivar_name
else
super method, *args, &block
end
end
end
會自動定義實例變量讀者的任何一組實例變量,或:
class Thing
IVARS = [:@first, :@second]
def method_missing(method, *args, &block)
ivar_name = "@#{method}".intern
if IVARS.include? ivar_name
if instance_variable_defined? ivar_name
instance_variable_get ivar_name
else
"your default"
end
else
super method, *args, &block
end
end
end
將定義讀者任何如果在IVARS
恆命名實例變量,默認爲默認值。我相信你可以看到你可以如何將它變成一個哈希映射實例變量名稱到它們的默認值或其他值。
或者你可以簡單地使用instance_variable_get
提供一個默認值,如果你並不需要任何比這更大的靈活性:
thing = Thing.new
thing.instance_variable_get :@ivar_name, "your default"
雖然這不能確定讀者的方法 - 你將不得不通過每個instance_variable_get
訪問時間。
我看到的行爲是,當我嘗試訪問未定義的屬性的method_missing不會被調用,它只是直接評估爲無,而不被攔截。我錯過了什麼嗎? –
- 1. 有沒有辦法在Ruby中覆蓋<<運算符?
- 2. 有沒有辦法覆蓋AssemblyInfo.cs中的屬性(例如AssemblyVersionAttribute)
- 3. 有沒有辦法來覆蓋ConfigurationManager.AppSettings?
- 4. 有沒有辦法在ec2實例中獲取實例ID
- 5. 有沒有辦法在單元測試中覆蓋處理器?
- 6. 有沒有辦法覆蓋openjpa中的javax.persistence.EntityManager.persist()方法
- 7. 有沒有辦法從Ruby中的實例調用私有的類方法?
- 8. 變量沒有被覆蓋的NodeJS
- 9. 覆蓋PHP中沒有繼承的實例方法?
- 10. 有沒有辦法在Ruby中強制實現接口方法?
- 11. 有沒有辦法重用Job實例?
- 12. Class實例變量沒有
- 13. Ruby on Rails的:硒覆蓋實例變量測試
- 14. Java繼承覆蓋實例變量
- 15. Java繼承 - 實例變量覆蓋
- 16. PHP覆蓋將實例變量
- 17. 有沒有辦法在C#中查看給定類實例的所有方法?
- 18. 有沒有辦法在本地覆蓋ZF2的application.config.php指令?
- 19. 有沒有辦法覆蓋的URL,而在骨幹呼籲model.destroy
- 20. 有沒有辦法測試Google地圖覆蓋圖的存在?
- 21. 有沒有辦法訪問C#中任何類的實例變量的地址?
- 22. Ruby實例變量語法
- 23. 有沒有辦法用反射「覆蓋」一個方法?
- 24. 有沒有辦法避免有全局變量來實現qsort
- 25. Checkstyle檢查ParameterNumber沒有覆蓋方法
- 26. 有沒有辦法'烘烤'變量?
- 27. 有沒有辦法測試變量「isForEachable」
- 28. 有沒有辦法檢查在Javascript(或局部變量)一clousure
- 29. 有沒有辦法檢查java中的變量標籤?
- 30. 實例變量似乎沒有在ruby方法鏈接中填充
可能重複:確實有紅寶石一method_missing的等效未定義的實例變量?](http://stackoverflow.com/questions/7651213/does-ruby-have-a-method-missing-equivalent-for-undefined-實例變量) – rdvdijk
我沒有任何計劃在生產 –