我知道我能做到以下幾點,它只是3線:是否有更簡單的(單行)語法來替代一個類方法?
class << self
alias :generate :new
end
但出於好奇,有沒有一種簡單的方法(沒有分號),如:
class_alias :generate, :new
我知道我能做到以下幾點,它只是3線:是否有更簡單的(單行)語法來替代一個類方法?
class << self
alias :generate :new
end
但出於好奇,有沒有一種簡單的方法(沒有分號),如:
class_alias :generate, :new
從Ruby 1.9開始,您可以使用singleton_class
方法來訪問類的單例對象。這樣您也可以訪問alias_method
方法。該方法本身是私人的,所以你需要用send
來調用它。這是你的一個班輪:
singleton_class.send(:alias_method, :generate, :new)
但是要記住,這alias
不會在這裏工作。
我不相信有任何類別的版本alias
。我通常使用它,正如你以前所示。
但是,您可能需要在alias
和alias_method
之間investigate the difference。這是可能有點反直覺的ruby棘手領域之一。特別是alias
關於後代的行爲可能不是你所期望的。
希望這會有所幫助!
偉大的鏈接謝謝! – AJcodez 2013-08-24 14:52:36
我粘貼一些別名方法的例子
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
有趣的事實:'高清self.generate;新; end'和'class_alias:generate,:new'是相同數量的字符。 – 2013-02-28 08:52:17
@AmitKumarGupta這是作弊,因爲'def self.generate;新; end'在堆棧上添加了一個冗餘調用(不是真的很重要,而是儘可能精確。) – mudasobwa 2013-02-28 08:55:29
@AmitKumarGupta如果您需要'new'來接受任何參數,它也不起作用。 – Ajedi32 2013-08-17 22:42:05