回答
你可以写一个包装方法
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
我没有任何计划在生产 –