2014-10-08 32 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

相关问题