2013-09-24 204 views
2

文件module.rb調用模塊方法進入另一個模塊中的Ruby

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

你是什麼意思「這是可能的?」?你試過了嗎?這將是明顯的檢查方式。答案可能是「是」,但我不明白你爲什麼沒有嘗試過。 –

+0

我試過..但沒有成功 – akdev

+0

我對上述評論表示歉意 - 我發現你確實有錯誤;今後請包括您看到的任何錯誤消息,謝謝。 –

回答

6

你絆倒的difference of include and extend

  • include使得
  • extend所包括的模塊在提供給實例你的類的的方法使得所包含的模塊在所述方法中在類可用

當定義用的方法self.method_name並且您在該方法內訪問selfself被綁定到當前類。

check_expiry,但是,包括在內,因此只能在實例端使用。

若要解決問題或者extend CardExpiry或使check_expiry類方法。

+0

正確答案..謝謝:) – akdev

0

我看更詳細一點的問題,這個問題是你module.rb文件:

module CardExpiry 
    def self.check_expiry value 
    return true 
    end 
end 

首先,有一個end文件丟失 - 需要關閉defmodule

其次,def行中的神奇self.將該方法轉換爲僞全局函數 - this answer explains it better than I can

此外,要調用的方法,你需要使用:

raise (CardExpiry::check_expiry 1203).inspect 
+0

是啊,這種方式工作:) ..但我想mixin行爲 – akdev

相關問題