你如何使用不同文件中的类?

时间:2016-03-23 20:36:59

标签: ruby

我试图使用其他文件中的类。

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>'

我做错了什么?

3 个答案:

答案 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