Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我不能';不需要';string.rb';ruby文件_Ruby_String_Gem_Require - Fatal编程技术网

为什么我不能';不需要';string.rb';ruby文件

为什么我不能';不需要';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更改行,则一切

我正在实现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更改行,则一切都将正常工作。为什么我不能使用“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方法非常繁重,可能是个坏主意。