新手问题 alias new_name old_name 中的参数能用变量吗?

kooder · September 20, 2017 · Last by robertyu replied at September 22, 2017 · 1345 hits

比如,

alias :old_plus :+ 

的用法是正确的,但是,如果

old = :+
new = :old_plus
alias new old

就会报错。 请教大家,谢谢。

kooder closed this topic. 20 Sep 15:31
kooder reopened this topic. 20 Sep 15:31

monkey patch

Reply to clarkyi

monkey patch 能有效吗?alias 是 ruby 的 keyword,不是 method。

这样吧,你把 new 换成别的试一下

alias 是 keyword

Reply to clarkyi

new --> new_name 一样不行。

我去,你知道 alias 的用法?alias 是对 method 的,不是对两个变量好吧 http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html

Reply to clarkyi

知道对 method 使用的,比如下面这段代码,想把 :old_plus 和 :+ 先赋给变量,再来使用 alias,就会报错。

class Fixnum
  alias :old_plus :+
  def +(value)
    self.old_plus(value).old_plus(1)
  end
end

alias 就是这么特殊,而且 alias 的冒号还可以省略,用 alias_method 吧

Reply to mizuhashi

确实 alias_method 可以传变量,多谢指点!👍

找到了一个 workaround😀

old = :+
new = :plus__
Fixnum.class_eval "alias #{new} #{old}"

敢动态 alias 也是心大

什么项目能这么复杂呢

You need to Sign in before reply, if you don't have an account, please Sign up first.