作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
module Test
def self.model_method
puts "this is a module method"
end
end
class A
include Test
end
A.model_method
这将是错误的:
undefined method `model_method' for A:Class (NoMethodError)
但是当我使用 A 的元类时,它起作用了:
module Test
def model_method
puts "this is a module method"
end
end
class A
class << self
include Test
end
end
A.model_method
谁能解释一下?
最佳答案
如果你想在包含模块时将类方法和实例方法混合到一个类中,你可以遵循以下模式:
module YourModule
module ClassMethods
def a_class_method
puts "I'm a class method"
end
end
def an_instance_method
puts "I'm an instance method"
end
def self.included(base)
base.extend ClassMethods
end
end
class Whatever
include YourModule
end
Whatever.a_class_method
# => I'm a class method
Whatever.new.an_instance_method
# => I'm an instance method
基本上是为了过度简化它,您扩展
以添加类方法,您include
以添加实例方法。当一个模块被包含时,它的 #included
方法被调用,它被包含在实际的类中。从这里你可以 extend
使用来自另一个模块的一些类方法的类.这是一种很常见的模式。
另请参阅:http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
关于ruby - 为什么模块的 'self'方法不能成为类的单例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039039/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!