ruby - 将模块方法调用到 Ruby 中的另一个模块中

标签 ruby

文件模块.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)

最佳答案

你偶然发现了 difference of include and extend .

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

当使用 self.method_name 定义方法并在该方法中访问 self 时,self 会绑定(bind)到当前类。

但是,

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

要解决此问题,请扩展 CardExpiry,或使 check_expiry 成为类方法。

关于ruby - 将模块方法调用到 Ruby 中的另一个模块中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18973906/

相关文章:

c# - 将 C# .Net 加密/解密算法迁移到 Ruby

ruby - 如何关闭 "Rack::Protection::JsonCsrf"?

ruby - Rails 3 中的 Restful API

ruby-on-rails - Ruby/Rails - 在不建模的情况下访问 "lookup"表?

ruby-on-rails - 如何使 activerecord-import 使用序列

ruby - 是否可以更改 Ruby 对象的类?

ruby - Ruby 中的数组容量限制

python - 进程组中的所有 child 并不总是看到信号

ruby - 如何在 ruby​​ proc/lambda 中使用真正的局部变量

ruby - 如何在 Ruby 的子模块中正确封装方法?我的方法不会出现在任何地方!