2
考慮下面的代碼:使ClassMethods也可作爲具有的ActiveSupport模塊功能::關注
module Foo
extend ActiveSupport::Concern
module ClassMethods
def foo
puts 'foo'
end
end
end
class Bar
include Foo
end
我想要做的就是調用Foo.foo
而不是Bar.foo
。有時在原始模塊上調用類方法會感覺更自然,尤其是當該功能與所包含的類無關時,可以更好地描述原始模塊名稱。
它工作的很好,謝謝!順便說一句,你爲什麼認爲代碼味道? – kenn
讓模塊從定義爲類方法的模塊自身擴展看起來不太合適。通常情況下,如果你想訪問Foo的foo方法,你只需要執行'Foo :: ClassMethods.foo'。它沒有什麼「錯誤」,但它不是我以前見過的模式,也不建議養成它的習慣。 –
@Beerlington:你確定這個函數在第一個例子中使用了'Foo :: ClassMethods.foo'嗎?我剛剛測試過,它沒有(Ruby v2.0)。謝謝。 – sequielo