有更简单的(单行)语法来混淆一个类方法吗?

我知道我可以做以下事情,只有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 。 我通常使用它,正如你以前所示。

但是,您可能想要调查 aliasalias_method之间的区别 。 这是ruby那些棘手的领域之一,可能有点反直觉。 特别是对于后代alias的行为可能不是你所期望的。

希望这可以帮助!