回答
你可以寫一個包裝方法
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. 有沒有辦法在Java中查找變量的長度?
- 3. 有沒有辦法覆蓋AssemblyInfo.cs中的屬性(例如AssemblyVersionAttribute)
- 4. 有沒有辦法來覆蓋ConfigurationManager.AppSettings?
- 5. Flash - 有沒有辦法獲得實例變量列表?
- 6. 有沒有辦法在ec2實例中獲取實例ID
- 7. 覆蓋實例中的MovieClip變量
- 8. 在java中說「實例變量沒有被覆蓋」是什麼意思?
- 9. 有沒有辦法在res/values中覆蓋strings.xml?
- 10. 有沒有辦法在單元測試中覆蓋處理器?
- 11. 有沒有辦法覆蓋openjpa中的javax.persistence.EntityManager.persist()方法
- 12. 有沒有辦法覆蓋blobstore中的現有Blob
- 13. Ruby - 有沒有辦法獲得一個特徵類的實例?
- 14. 有沒有辦法在JPA的實體的子類中覆蓋ID?
- 15. 覆蓋現有實例的方法
- 16. 有沒有辦法從Ruby中的實例調用私有的類方法?
- 17. 有沒有辦法在更新mysql查詢中定義變量?
- 18. 有沒有辦法在Ruby中強制實現接口方法?
- 19. 變量沒有被覆蓋的NodeJS
- 20. 有沒有辦法重用Job實例?
- 21. 覆蓋PHP中沒有繼承的實例方法?
- 22. Class實例變量沒有
- 23. Ruby on Rails的:硒覆蓋實例變量測試
- 24. 有沒有辦法在C#中查看給定類實例的所有方法?
- 25. Java繼承 - 實例變量覆蓋
- 26. Java繼承覆蓋實例變量
- 27. PHP覆蓋將實例變量
- 28. 有沒有辦法覆蓋模板中的表單值?
- 29. 有沒有辦法來覆蓋編譯器::模板中定義()
- 30. 有沒有辦法覆蓋的URL,而在骨幹呼籲model.destroy
可能重複:確實有紅寶石一method_missing的等效未定義的實例變量?](http://stackoverflow.com/questions/7651213/does-ruby-have-a-method-missing-equivalent-for-undefined-實例變量) – rdvdijk
我沒有任何計劃在生產 –