5

文件模块.rb

module CardExpiry
  def check_expiry value
    return true
  end
end

文件包含.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)
4

2 回答 2

11

您偶然发现 和区别includeextend

  • include使包含模块中的方法可用于您的类的实例
  • extend使包含模块中的方法在类中可用

当定义一个方法并在该方法内self.method_name访问时,绑定到当前类。selfself

check_expiry但是,包含在内,因此仅在实例端可用。

要么解决问题extend CardExpiry,要么创建check_expiry一个类方法。

于 2013-09-24T06:18:01.460 回答
0

我已经更详细地查看了您的问题,问题是您的module.rb文件:

module CardExpiry
  def self.check_expiry value
    return true
  end
end

首先,end文件中缺少一个 - 两者都def需要module关闭。

self.其次,该行中的魔法def将方法变成了一个伪全局函数——这个答案比我能解释得更好

此外,要调用该方法,您需要使用:

raise (CardExpiry::check_expiry 1203).inspect
于 2013-09-24T06:13:59.900 回答