使用 define_method 在控制台上创建一个等于的方法
use define_method to create a method with equal on console
我有这个
ALIAS = %w{a b c}
ALIAS.each do |shortcode|
define_method("#{shortcode}=") do |value|
puts "CALLING THE ASSIGNMENT METHOD"
eval "$#{shortcode} = value"
end
end
我在 Pry 控制台上执行了它,然后执行:
a = 123
我以包含 123
的 a
变量结束,但我的方法没有被调用。
如果我这样做
self.a = 123
调用了我的方法。
有没有办法让它在没有自我的情况下工作?
Is there any way to make it work with self?
你的意思是没有自我?
没有。你必须使用 self.
注意如果你有一个表达式
x.y=z
方法 "y=" 在对象 x 上调用,参数为 z。
但是,如果你有一个表达式
y=z
y 被解释为变量的名称,并被赋予值 z。
既然要调用a=方法,就需要一个接收者。虽然我们通常可以省略接收者,但如果它是 'self',Ruby 在这里无法识别您想要进行方法调用。因此,您必须明确使用 'self'.
我有这个
ALIAS = %w{a b c}
ALIAS.each do |shortcode|
define_method("#{shortcode}=") do |value|
puts "CALLING THE ASSIGNMENT METHOD"
eval "$#{shortcode} = value"
end
end
我在 Pry 控制台上执行了它,然后执行:
a = 123
我以包含 123
的 a
变量结束,但我的方法没有被调用。
如果我这样做
self.a = 123
调用了我的方法。
有没有办法让它在没有自我的情况下工作?
Is there any way to make it work with self?
你的意思是没有自我?
没有。你必须使用 self.
注意如果你有一个表达式
x.y=z
方法 "y=" 在对象 x 上调用,参数为 z。
但是,如果你有一个表达式
y=z
y 被解释为变量的名称,并被赋予值 z。
既然要调用a=方法,就需要一个接收者。虽然我们通常可以省略接收者,但如果它是 'self',Ruby 在这里无法识别您想要进行方法调用。因此,您必须明确使用 'self'.