使用define_method在控制台上创建一个相等的方法

时间:2017-11-03 02:18:09

标签: ruby metaprogramming

我是这个

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

我以包含a的{​​{1}}变量结束,但我的方法不会被调用。

如果我改为

123

我的方法被调用。

有没有办法让它在没有自我的情况下发挥作用?

2 个答案:

答案 0 :(得分:2)

请注意,如果您有表达式

x.y=z

方法" y ="在对象x上调用,参数为z。

但是,如果你有一个表达式

y=z

y被解释为变量的名称,并被赋值为z。

由于您希望调用a =方法,因此您需要一个接收器。虽然我们经常可以省略接收器,但如果它是“自我”,Ruby在这里无法识别您想要进行方法调用。因此,您必须明确使用' self'。

答案 1 :(得分:0)

  

有没有办法让它适用于自己?

你的意思是没有自己吗?

没有。你必须使用自己。