有更简单的(单行)语法来混淆一个类方法吗?
我知道我可以做以下事情,只有3行:
class << self alias :generate :new end
但出于好奇,是否有一个更简单的方法(没有分号),如:
class_alias :generate, :new
从Ruby 1.9开始,您可以使用singleton_class
方法来访问类的单例对象。 这样你也可以访问alias_method
方法。 该方法本身是私人的,所以你需要用send
来调用它。 这是你的一个class轮:
singleton_class.send(:alias_method, :generate, :new)
请记住, alias
不会在这里工作。
我正在粘贴一些别名方法的例子
class Test def simple_method puts "I am inside 'simple_method' method" end def parameter_instance_method(param1) puts param1 end def self.class_simple_method puts "I am inside 'class_simple_method'" end def self.parameter_class_method(arg) puts arg end alias_method :simple_method_new, :simple_method alias_method :parameter_instance_method_new, :parameter_instance_method singleton_class.send(:alias_method, :class_simple_method_new, :class_simple_method) singleton_class.send(:alias_method, :parameter_class_method_new, :parameter_class_method) end Test.new.simple_method_new Test.new.parameter_instance_method_new("I am parameter_instance_method") Test.class_simple_method_new Test.parameter_class_method_new(" I am parameter_class_method")
OUTPUT
I am inside 'simple_method' method I am parameter_instance_method I am inside 'class_simple_method' I am parameter_class_method
我不相信有任何类别的特定版本的alias
。 我通常使用它,正如你以前所示。
但是,您可能想要调查 alias
和alias_method
之间的区别 。 这是ruby那些棘手的领域之一,可能有点反直觉。 特别是对于后代alias
的行为可能不是你所期望的。
希望这可以帮助!