我试图使用其他文件中的类。
something.rb
class Something
def initialize
end
def getText
'Some example text'
end
end
another.rb
class Another
end
somethingVar = Something.new
puts somethingVar.getText
这给了我错误
/usr/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /home/chris/RubymineProjects/untitled1/another.rb
/home/chris/RubymineProjects/untitled1/another.rb:4:in `<top (required)>': uninitialized constant Something (NameError)
from -e:1:in `load'
from -e:1:in `<main>'
我做错了什么?
答案 0 :(得分:5)
你必须要求something.rb。
require 'something.rb'
答案 1 :(得分:4)
使用此类代码的最常用方法是通过require:
require 'something.rb'
..将允许使用在该文件中定义的类,但前提是该文件可以在Ruby加载路径中找到,或者与已安装的gem相关联。
如果你想编写自己的,特别是测试或短期黑客,你可能想要使用require_relative,它需要你想要使用的文件的相对路径:
require_relative './something.rb'`
如果something.rb与another.rb
位于同一目录中,则应该有效有关在Ruby中重用代码的各种方法的更多信息,请访问here。
答案 2 :(得分:0)
注意:如果没有.rb
扩展名,则查看所需的文件名是非常常见的,如下面的示例所示。
正如其他人所说,你必须要求“&#39;如果在相同的负载路径中。
require 'something'
或require_relative&#39; ./ something&#39;,包括文件的路径。
require_relative 'something'
&#34;除了看起来更好,这种引用扩展的简单方式是必要的,因为并非所有扩展都使用以.rb结尾的文件。具体来说,用C编写的扩展名存储在以.so或.dll结尾的文件中。为了让进程保持透明 - 也就是说,为了省去你想知道你想要的扩展名是否使用.rb文件的麻烦 - Ruby接受一个裸字,然后进行一些自动文件搜索并尝试使用可能的文件名,直到它找到与您请求的扩展名对应的文件。&#34;
了解更多信息 - http://rubylearning.com/satishtalim/including_other_files_in_ruby.html