Ruby on rails 为什么InstanceMethods模块被弃用?
我爱你 它可以很容易地向类添加功能,语法也很好 无论如何,在Rails3.2中,InstanceMethods模块已经被弃用。如果我理解正确,我们应该在Ruby on rails 为什么InstanceMethods模块被弃用?,ruby-on-rails,ruby-on-rails-3,activesupport,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Activesupport,Ruby On Rails 3.2,我爱你 它可以很容易地向类添加功能,语法也很好 无论如何,在Rails3.2中,InstanceMethods模块已经被弃用。如果我理解正确,我们应该在included块中定义我们的方法(实际上它就在模块的主体中): 我只是想知道是否有人知道他们为什么决定这么做?让我们看看您首先链接的示例 module TagLib extend ActiveSupport::Concern module ClassMethods def find_by_tags() # ...
included
块中定义我们的方法(实际上它就在模块的主体中):
我只是想知道是否有人知道他们为什么决定这么做?让我们看看您首先链接的示例
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
module InstanceMethods
def tags()
# ...
end
end
end
当您将TagLib作为关注点包含到类中时,会自动使用ClassMethods模块和includes InstanceMethods模块扩展类
class Foo
include TagLib
# is roughly the same as
include TagLib::InstanceMethods
extend TagLib::ClassMethods
end
但正如您可能注意到的,我们已经包含了TagLib模块本身,因此在其中定义的方法已经可以作为类上的实例方法使用。那么,您为什么想要一个单独的InstanceMethods模块呢
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
def tags()
# ...
end
end
class Foo
include TagLib
# does only `extend TagLib::ClassMethods` for you
end
好的,这是有道理的。但是现在我想知道为什么他们一开始就做出了这个选择。。。他们包含InstanceMethods模块的方式与我只做
包含TagLib
时包含模块的普通实例方法的方式是否没有区别?我不确定,但我认为这只是花了一些时间才实现。是的,我想这是他们看到该功能并说“WTF!我们为什么要这样做?”。将方法放在InstanceMethods模块中是多余的。因此,不,旧方法和新方法之间没有区别,只是少了一个常量。
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
def tags()
# ...
end
end
class Foo
include TagLib
# does only `extend TagLib::ClassMethods` for you
end