获取在Ruby中从此类接近方法的变量的名称

获取在Ruby中从此类接近方法的变量的名称,ruby,metaprogramming,metaclass,Ruby,Metaprogramming,Metaclass,我想得到在类的方法中接近类的变量的名称。就像这样: class Object def my_val "#{???} = '#{self.to_s}'" end end a1 = "val1" a1.my_val # = a1 = 'val1' a2 = "val2" a2.my_val # = a2 = 'val2' 我能做吗 我认为简短的回答是“不,你不能:/” 对于Ruby(和大多数语言),变量名没有任何意义。唯一能给你一个关于变量名的提示的是编译器,它是一个完全不同于

我想得到在类的方法中接近类的变量的名称。就像这样:

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

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

我能做吗

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


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

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


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

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


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

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


对于Ruby(和大多数语言),变量名没有任何意义。唯一能给你关于变量名的提示的是编译器,它处于Ruby内部之外的另一个抽象级别。

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

你认为这里会发生什么

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
然后:


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

你认为这里会发生什么

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
然后:


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

你认为这里会发生什么

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
然后:


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

你认为这里会发生什么

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
然后:



你的帖子不清楚。@ArupRakshit,对不起,我不知道怎么解释。我认为这个例子很清楚。您只使用了
def
,但它应该是
def..end
block@ArupRakshit,哦,我只是ruby的初学者,这是scala的风格:)修复仍然不清楚…)你的帖子不清楚。@ArupRakshit,对不起,我不知道怎么解释。我认为这个例子很清楚。您只使用了
def
,但它应该是
def..end
block@ArupRakshit,哦,我只是ruby的初学者,这是scala的风格:)修复仍然不清楚…)你的帖子不清楚。@ArupRakshit,对不起,我不知道怎么解释。我认为这个例子很清楚。您只使用了
def
,但它应该是
def..end
block@ArupRakshit,哦,我只是ruby的初学者,这是scala的风格:)修复仍然不清楚…)你的帖子不清楚。@ArupRakshit,对不起,我不知道怎么解释。我认为这个例子很清楚。您只使用了
def
,但它应该是
def..end
block@ArupRakshit,哦,我只是ruby的初学者,这是scala的风格:)修复仍然不清楚…)我知道Ruby擅长元编程,我认为这可能是真的。我喜欢你的dump_var方法,谢谢!Ruby为您提供了很多反射功能,但有些功能不容易公开。从理论上讲,追溯到对象的所有引用是可能的,但也不容易。我知道Ruby擅长元编程,我认为这可能是真的。我喜欢你的dump_var方法,谢谢!Ruby为您提供了很多反射功能,但有些功能不容易公开。从理论上讲,追溯到对象的所有引用是可能的,但也不容易。我知道Ruby擅长元编程,我认为这可能是真的。我喜欢你的dump_var方法,谢谢!Ruby为您提供了很多反射功能,但有些功能不容易公开。从理论上讲,追溯到对象的所有引用是可能的,但也不容易。我知道Ruby擅长元编程,我认为这可能是真的。我喜欢你的dump_var方法,谢谢!Ruby为您提供了很多反射功能,但有些功能不容易公开。追溯到一个对象的所有引用在理论上是可能的,但也不容易。