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

kooder · 2017年09月20日 · 最后由 robertyu 回复于 2017年09月22日 · 1344 次阅读

比如,

alias :old_plus :+ 

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

old = :+
new = :old_plus
alias new old

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

kooder 关闭了讨论。 09月20日 15:31
kooder 重新开启了讨论。 09月20日 15:31

monkey patch

clarkyi 回复

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

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

alias 是 keyword

clarkyi 回复

new --> new_name 一样不行。

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

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 吧

mizuhashi 回复

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

找到了一个 workaround😀

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

敢动态 alias 也是心大

什么项目能这么复杂呢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号