【问题标题】:Why I couldn't require 'string.rb' file in ruby为什么我在 ruby​​ 中不需要“string.rb”文件
【发布时间】:2014-12-03 08:21:15
【问题描述】:

我正在实现 gem,我想向 String 类添加一些自定义方法。所以,我在'lib'目录下创建了子目录'core_ext',并把文件'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' 作为文件名?

【问题讨论】:

  • 您不需要string.rb 才能使您的代码正常工作。要求告诉 Ruby 加载该类,并且 String 类已经加载。您的代码似乎应该可以工作。我刚刚对其进行了测试,并且效果很好。您能否更具体地了解“不工作”的含义?
  • ruby require not working 的可能重复项(尝试require_relative

标签: ruby string gem require


【解决方案1】:

如果有一个名为core_ext/string 的文件已在其他任何地方加载,则该文件也被视为已加载。您可能需要想出一个不同的名称。

p11y 指出的 Ruby 1.9 的require_relative 特性是一个更好的解决方案。

【讨论】:

  • 是的,你是对的。我有“base_gem”和当前的 gem,当前的 gem 正在使用“base_gem”。 Base gem 也有 'core_ext/string.rb' 并需要它,但奇怪的是 require 认为它是相等的路径,你知道它为什么会这样想吗?
  • @dolgishev 试试load 'core_ext/string.rb'load 不聪明,愉快地加载文件两次。
  • @steenslag 使用load 是一种非常严厉的方法,可能是个坏主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2020-05-03
  • 2011-10-08
相关资源
最近更新 更多