我知道我可以做到以下几点,而且只有3行:
class << self
alias :generate :new
end
但出于好奇,有一种更简单的方式(没有分号),如:
class_alias :generate, :new
答案 0 :(得分:69)
从Ruby 1.9开始,您可以使用singleton_class
方法访问类的单例对象。这样您还可以访问alias_method
方法。该方法本身是私有的,因此您需要使用send
调用它。这是你的一个班轮:
singleton_class.send(:alias_method, :generate, :new)
请注意,alias
在这里不起作用。
答案 1 :(得分:6)
我正在粘贴一些别名方法示例
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")
输出
I am inside 'simple_method' method
I am parameter_instance_method
I am inside 'class_simple_method'
I am parameter_class_method
答案 2 :(得分:3)
我不相信alias
有任何特定于课程的版本。我通常会像你之前演示过的那样使用它。
但是,您可能希望在alias
和alias_method
之间investigate the difference。这是红宝石的棘手领域之一,可能有点违反直觉。特别是alias
关于后代的行为可能不是你所期望的。
希望这有帮助!