使用 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

我以包含 123a 变量结束,但我的方法没有被调用。

如果我这样做

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'.