0

我想获取在类的方法中接近哪个类的变量的名称。像那样:

class Object
  def my_val
    "#{???} = '#{self.to_s}'"
  end
end

a1 = "val1"
a1.my_val # = a1 = 'val1'
a2 = "val2"
a2.my_val # = a2 = 'val2' 

我可以做吗?

4

2 回答 2

3

一个对象不知道它可能存储或可能不存储在哪个变量中,在许多情况下这是一个完全没有意义的概念。

你希望在这里发生什么?

ref = Object.new
another_ref = ref
@ref = another_ref
hash = { key: @ref }
array = [ hash[:key] ]
array[0].my_val
# => ...?

有很多方法可以引用一个对象。知道正在使用哪个名称是无关紧要的。

一般而言,变量只是被赋予任意名称的引用,该名称与所讨论的对象无关。

您可以做的是提供上下文:

my_var = "test"
my_var.my_val(:my_var)
# => my_var="test"

实现为:

def my_var(name)
  "#{name}=#{self.inspect}"
end

你也可以把它卷起来,聪明一点:

def dump_var(name)
  "%s=%s" % [ name, instance_variable_get(:"@#{name}").inspect ]
end

然后:

@foo = "test"
dump_var(:foo)
# => foo="test"
于 2013-10-18T15:55:47.333 回答
0

我认为简短的回答是“不,你不能:/”。

对于 Ruby(和大多数语言)来说,变量名没有意义。唯一能给你关于变量名的提示的是编译器,它处于与 Ruby 内部完全不同的抽象级别。

于 2013-10-18T15:53:58.137 回答