2008-09-17 30 views
0

(抱歉,我本來應該更清晰的代碼,我第一次公佈這一點。希望這是有道理的)爲什麼模塊總是沒有遵循紅寶石中的'require'?

文件「size_specification.rb」

class SizeSpecification 
    def fits?  
    end 
end 

文件「some_module.rb」

require 'size_specification' 

module SomeModule 
    def self.sizes 
    YAML.load_file(File.dirname(__FILE__) + '/size_specification_data.yml') 
    end 
end 

文件「size_specification_data.yml

--- 
- !ruby/object:SizeSpecification 
    height: 250 
    width: 300 

然後,當我打電話

SomeModule.sizes.first.fits? 

我得到一個例外,因爲「尺寸」是如此,他們沒有一個「適合」功能的對象不是SizeSpecification的。

回答

0

在二讀時,我有點困惑,你似乎想要將課程混合到模塊中,這可能並非如此明智。 YAML應該加載SizeSpecifications的數組嗎?

這似乎是你沒有將模塊混合到你的課堂。如果我在irb中運行測試,那麼require會引發LoadError。所以我假設你已經把兩個文件放在一起,如果不轉儲的話。

通常情況下,你會在模塊中寫入功能,然後將其混合到課程中。所以你可以修改你的代碼是這樣的:

class SizeSpecification 
    include SomeModule 
    def fits?  
    end 
end 

,這將使你然後說:

SizeSpecification::SomeModule.sizes 

我想你也應該能夠說:

SizeSpecification.sizes 

但是,這種要求你從尺寸方法定義的前綴中取出自己。

這有幫助嗎?

1

您的設置和紅寶石安裝是否正常?我創建了這3個文件,並在「test.rb」中寫下以下內容:

require 'yaml' 
require "some_module" 

SomeModule.sizes.first.fits? 

然後我跑了它。

$ ruby --version 
ruby 1.8.6 (2008-06-20 patchlevel 230) [i486-linux] 
$ ruby -w test.rb 
$ 

沒有錯誤!

+0

同上。所發佈的代碼對我來說工作得非常好。 – 2008-09-21 04:08:18

0

問題代碼讓我有點困惑。

一般情況下,如果發生這種情況,這是一個好兆頭,我正試圖以錯誤的方式做事。

最好問一個與你的實際預期結果有關的問題,而不是針對你的問題的特定「攻擊」。他們我們可以說'nonono,不這樣做,做這個'或'ahhhhh,現在我明白你想要做什麼'