[英]calling module method into another module in Ruby
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)
你偶然發現了include
和extend
的區別 。
include
使包含模塊中的方法可用於您的類的實例 extend
使得包含的模塊中的方法在類中可用 使用self.method_name
定義方法並在該方法中訪問self
, self
將綁定到當前類。
但是, check_expiry
包含在內,因此僅在實例端可用。
要解決此問題,請extend CardExpiry
,或使check_expiry
成為類方法。
我更詳細地看了一下你的問題,問題是你的module.rb
文件:
module CardExpiry
def self.check_expiry value
return true
end
end
首先,文件中缺少一個end
- def
和module
需要關閉。
第二,神奇的self.
在def
行中將方法轉換為偽全局函數 - 這個答案比我能更好地解釋它 。
此外,要調用該方法,您需要使用:
raise (CardExpiry::check_expiry 1203).inspect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.