我想获得在类的方法中接近哪个类的变量的名称。像那样:
class Object
def my_val
"#{???} = '#{self.to_s}'"
end
end
a1 = "val1"
a1.my_val # = a1 = 'val1'
a2 = "val2"
a2.my_val # = a2 = 'val2'
我可以这样做吗?
答案 0 :(得分: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"
答案 1 :(得分:0)
我认为简短的回答是“不,你不能:/”。
对于Ruby(和大多数语言),变量名称没有意义。可以给你一个关于变量名的提示的唯一一个是编译器,它在整个其他抽象级别而不是Ruby内部。