Ruby:别名属于其他类或模块的方法

时间:2017-06-24 22:40:57

标签: ruby

在解决编码挑战时,我遇到了这条指令:

  

如果您需要调试,请使用STDERR.puts

所以我想到将STDERR.puts别名化为sp

>> alias :sp STDERR.method(:puts)

SyntaxError: (irb):96: syntax error, unexpected '.', expecting end-of-input
alias :sp STDERR.method(:puts)
                 ^

由于alias是一个ruby关键字,它不允许我这样做。有没有办法为属于另一个类/模块的方法添加别名?


我知道我可以把它包装成一个本地方法(就像我一样)。我的目的是进一步了解ruby的可能性以及alias的工作方式。

1 个答案:

答案 0 :(得分:1)

由于Holger Just,我找到的一个解决方案是使用Forwardable

require 'forwardable'
self.extend Forwardable
singleton_class.def_delegator "STDERR", "puts", "sp"

>> sp "a" "string"
astring

虽然它非常详细,但我不确定将STDERR.puts包装到新方法中会更好。