Ruby 是否可能调用定义的?关于动态实例变量名?

Ruby 是否可能调用定义的?关于动态实例变量名?,ruby,Ruby,有没有办法对动态实例变量名调用checkdefined??我想要的是能够做这样的事情: dynamic_attr = 'foo' define_method :my_method do if defined? instance_variable_get("@#{dynamic_attr}") # Obviously fails, but you see what I'm getting at... .... end end 当然,这会失败,因为已定义?是一种特殊形式,它查看文本

有没有办法对动态实例变量名调用check
defined?
?我想要的是能够做这样的事情:

dynamic_attr = 'foo'
define_method :my_method do
  if defined? instance_variable_get("@#{dynamic_attr}") # Obviously fails, but you see what I'm getting at...
    ....
  end
end

当然,这会失败,因为
已定义?
是一种特殊形式,它查看文本,因此在本例中返回
“方法”
,因为它查看的是实际的
实例变量\u get
方法。当然,如果我调用过
@foo=nil
,那么
实例变量\u get(“@foo”)
将返回
nil
,因此它与从未设置过的变量没有区别。有没有办法让我知道
@foo
的定义是否与
定义的语义相同?
但是是以动态的方式定义的?

如果我得到了您的问题,您需要检查是否定义了实例变量
Object#instance_variable_get
检索现有变量的值,或者
nil
如果不存在,则检索实例变量名

您可以通过其对所有现有变量的成员身份来检查动态创建的变量名的定义,如:

dynamic_attr = 'foo'
define_method :my_method do
  if instance_variables.member? "@#{dynamic_attr}".to_sym
    ....
  end
end

请参阅随
Object#实例变量返回的数组
包含符号,因此您需要将带有
String#的参数转换为#sym
,以将苹果与苹果进行比较。

如果我确实了解您的问题,您需要检查是否定义了实例变量
Object#instance_variable_get
检索现有变量的值,或者
nil
如果不存在,则检索实例变量名

您可以通过其对所有现有变量的成员身份来检查动态创建的变量名的定义,如:

dynamic_attr = 'foo'
define_method :my_method do
  if instance_variables.member? "@#{dynamic_attr}".to_sym
    ....
  end
end

请参阅随
Object#instance#u variables
返回的数组包含符号,因此您需要将带有
String#的参数转换为#sym
以比较苹果和苹果。

奇怪的是,没有人提到这一点。还有


奇怪的是没有人提到那件事。还有


您不能使用
“@#{dynamic_attr}”
,因为它实际上返回
“@foo”
,这不是变量的名称,而是它的内容。您也不能使用
@dynamic\u attr
,因为这不是变量的名称,
dynamic\u attr
是。尝试分配给
@dynamic\u attr
并在尝试访问它时使用该名称。您不能使用
“@{dynamic\u attr}”
,因为它实际上返回
“@foo”
,这不是变量的名称,而是它的内容。您也不能使用
@dynamic\u attr
,因为这不是变量的名称,
dynamic\u attr
是。尝试分配给
@dynamic\u attr
,并在尝试访问它时使用该名称。啊!那更好,对不起,大卫,但我得给这一张支票。啊!那更好,抱歉,大卫,但我得检查一下这个。