我正在使用Ruby 1.9.2和Ruby on Rails v3.2.2 gem。我努力學習的元編程「正確的方式」,並在這個時候,我走樣由RoR的ActiveSupport::Concern
模塊提供的included do ... end
塊的實例方法:瞭解實例方法別名時的單例類
module MyModule
extend ActiveSupport::Concern
included do
# Builds the instance method name.
my_method_name = build_method_name.to_sym # => :my_method
# Defines the :my_method instance method in the including class of MyModule.
define_singleton_method(my_method_name) do |*args|
# ...
end
# Aliases the :my_method instance method in the including class of MyModule.
singleton_class = class << self; self end
singleton_class.send(:alias_method, :my_new_method, my_method_name)
end
end
「Newbiely」來說,與搜索上網絡我想出了singleton_class = class << self; self end
聲明,我用這個(而不是class << self ... end
塊)爲了範圍my_method_name
變量,使得動態生成的混疊。
我想了解到底爲什麼和如何的singleton_class
作品在上面的代碼,如果有更好的方法(也許,一個更容易維護和高性能的一個)實現相同的(別名,定義單身法等),但「正確的方式」,因爲我認爲不是這樣。
這似乎不是那些已經在現有的方法來工作。如果我想要別名ActiveRecord模型已有的delete方法,該怎麼辦? –