获取在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为您提供了很多反射功能,但有些功能不容易公开。追溯到一个对象的所有引用在理论上是可能的,但也不容易。