FIle module.rb
module CardExpiry
def check_expiry value
return true
end
end
文件include.rb
#raise File.dirname(__FILE__).inspect
require "#{File.dirname(__FILE__)}/module.rb"
module Include
include CardExpiry
def self.function
raise (check_expiry 1203).inspect
end
end
致电
Include::function
这可能吗?
调用时触发错误:
`function': undefined method `check_expiry' for Include:Module (NoMethodError)
答案 0 :(得分:8)
你偶然发现了difference of include
and extend
。
include
使所包含模块中的方法可用于您班级的实例 extend
使类 使用self.method_name
定义方法并在该方法中访问self
时,self
绑定到当前类。
check_expiry
包含在内,因此仅在实例端可用。
要解决问题,请extend CardExpiry
或使check_expiry
成为类方法。
答案 1 :(得分:0)
我已经更详细地查看了您的问题,问题是您的module.rb
文件:
module CardExpiry
def self.check_expiry value
return true
end
end
首先,文件中缺少end
- def
和module
都需要关闭。
其次,self.
行中的神奇def
将方法转换为伪全局函数 - this answer explains it better than I can。
此外,要调用该方法,您需要使用:
raise (CardExpiry::check_expiry 1203).inspect