为什么我不能';不需要';string.rb';ruby文件
我正在实现gem,我想向String类添加一些自定义方法。因此,我在“lib”目录子目录“core_ext”中创建了文件“string.rb” string.rb包含:为什么我不能';不需要';string.rb';ruby文件,ruby,string,gem,require,Ruby,String,Gem,Require,我正在实现gem,我想向String类添加一些自定义方法。因此,我在“lib”目录子目录“core_ext”中创建了文件“string.rb” string.rb包含: class String def custom_method some_action end end 在我的主要文件中,我做了: require 'core_ext/string.rb' 但它对字符串类没有任何影响 如果我将文件名更改为其他名称,如“my_string.rb”并使用require更改行,则一切
class String
def custom_method
some_action
end
end
在我的主要文件中,我做了:
require 'core_ext/string.rb'
但它对字符串类没有任何影响
如果我将文件名更改为其他名称,如“my_string.rb”并使用require更改行,则一切都将正常工作。为什么我不能使用“string.rb”作为文件名?如果有一个名为
core\u ext/string
的文件已经加载到其他任何地方,那么这个文件也被视为加载了。你可能需要想出一个不同的名字
p11y指出的Ruby 1.9的
require\u relative
特性是一个更好的解决方案。您的代码不需要string.rb
。Required告诉Ruby加载该类,String类已经加载。您的代码似乎应该可以工作。我刚测试过,效果很好。你能更具体地说明“不工作”的含义吗?可能重复(试试require\u relative
)是的,你是对的。我有'base_gem'和当前gem,当前gem使用'base_gem'。基本gem也有“core\u ext/string.rb”并需要它,但奇怪的是,需要它的人认为它的路径是相等的,你知道它为什么这样想吗?@dolgisev try加载“core\u ext/string.rb”
<代码>加载并不聪明,而且可以愉快地加载文件两次。@使用加载
的steenslag方法非常繁重,可能是个坏主意。