2014-10-08 56 views
0

我正在實現gem,我想向String類添加一些自定義方法。所以,我在'lib'目錄下創建了子目錄'core_ext',並在那裏放置了'string.rb'文件。爲什麼我不能在Ruby中需要'string.rb'文件

string.rb包含:

class String 
    def custom_method 
    some_action 
    end 
end 

在我的主文件我做:

require 'core_ext/string.rb' 

,但它不會對String類的任何影響,

如果我改變文件的名稱改爲其他名稱,比如'my_string.rb',並且改爲使用require,所有內容都可以正常工作。爲什麼我不能使用'string.rb'作爲文件名?

+0

你不需要'string.rb'來讓你的代碼工作。要求告訴Ruby加載該類,並且String類已經加載。你的代碼似乎應該工作。我只是測試它,它工作正常。你能更具體地說明「不工作」是什麼意思嗎? – Max 2014-10-08 15:44:33

+0

可能重複的[紅寶石需要不工作](http://stackoverflow.com/questions/11600170/ruby-require-not-working)(嘗試'require_relative') – 2014-10-08 15:48:54

回答

1

如果有一個名爲core_ext/string的文件已經加載到其他地方,這個文件也被認爲是加載的。你可能需要拿出一個不同的名字。

p11y指出的Ruby 1.9的require_relative功能是一個更好的解決方案。

+0

是的,你是對的。我有'base_gem'和當前的寶石,當前的寶石使用'base_gem'。基礎寶石也有'core_ext/string.rb'並且需要它,但奇怪的是需要認爲它是平等的路徑,你知道它爲什麼這樣想嗎? – dolgishev 2014-10-08 16:03:01

+0

@dolgishev嘗試'加載'core_ext/string.rb''。 'load'不是很聰明,很高興地加載文件兩次。 – steenslag 2014-10-08 17:47:05

+0

@steenslag使用'load'是一種非常笨手笨腳的方法,可能是一個糟糕的主意。 – tadman 2014-10-08 17:47:44

相關問題