我想使用remove_instance_variable(instance_variable)
,其中instance_variable
包含一个形式为:@some_variable
的符号,但首先我想验证示例变量(例如:@some_variable
存在。defined? instance_variable
当然会返回“local-variable”,所以这对我没有好处。
即使我可以获取instance_variable
的内容,为了有效地使用defined? :@some_variable
,它也会返回“expression”,因为它告诉我符号已经定义了。(所有符号,即使是您以前从未使用过的符号,在此上下文中也将返回“expression”。
如果我使用eval
,那么这个符号可以方便地被实际的示例变量替换,它可以工作,返回nil
或“instance-variable”。
eval("defined? #{instance_variable}")
字符串
- 但是 * 考虑到对
eval
的强烈厌恶(当然,在变量可能包含用户提交的值的情况下,这是合理的),如果可能的话,我宁愿找到一个不同的解决方案。即使我完全确保instance_variable
不可能包含任何用户提交的数据,在我之后查看代码的每个人都会停下来问“为什么这里使用eval
?“.
是否有其他方法来检查instance_variable
中的符号引用的示例变量是否已定义?
1条答案
按热度按时间bejyjqdl1#
Object
实现了获取、设置、检查、列出和删除示例变量的5种方法:Object#instance_variable_get
-返回示例变量的值Object#instance_variable_set
-设置示例变量的值Object#instance_variable_defined?
-检查是否定义了示例变量Object#instance_variables
-返回所有示例变量名的数组Object#remove_instance_variable
-删除示例变量instance_variable_defined?
是您正在寻找的:字符串
该方法也适用于实现可能是
nil
的值的记忆:型