如何在另一个Ruby代码文件中引用一个方法?

Bry*_*yan 19 ruby

我有一个Ruby代码文件(somelogic.rb),它包含几个方法和类,位于/ home/user/code中.现在我在同一目录中编写另一个类,并希望引用somelogic.rb中的方法和类.我怎么做?我非常感谢任何意见.

Dav*_*son 27

如果您使用的是Ruby 1.9或更高版本,这是最简单的方法:

require_relative 'somelogic'
Run Code Online (Sandbox Code Playgroud)

如果您希望代码在1.9及更早版本的Ruby中工作,则应该这样做:

require File.join File.dirname(__FILE__), 'somelogic'
Run Code Online (Sandbox Code Playgroud)

无论选择哪一行,都应该将它放在ruby文件的顶部.然后,somelogic.rb中定义的任何类,模块或全局变量都可用于您的程序.


mli*_*elt 13

这是场景:

/home/user/code/somelogic.rb
class MyMath
  def self.sin(number)
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

您想要使用sin其他文件中的方法mylogic.rb.

根据ruby的版本,执行以下操作之一:

Ruby 1.8.x
require "somelogic"
class OtherThings
  def some_method
    MyMath.sin(42)
  end
end
Run Code Online (Sandbox Code Playgroud)

使用模式适用于所有ruby版本,但require语句可能不同.

Ruby 1.9.x
require_relative "somelogic"
Run Code Online (Sandbox Code Playgroud)

或变异

Ruby 1.9.x
require "./somelogic"
Run Code Online (Sandbox Code Playgroud)

第一个变化工作的时候,只有当你拨打第二个ruby mylogic.rb在目录mylogic.rb和somelogic.rb所在的位置.

如果要从位于另一个目录中的起始点加载该目录中的文件,则应使用:

Ruby 1.8.x and Ruby 1.9.x
$: << File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

这扩展了Ruby的加载路径.它读取(相对)路径__FILE__,获取其目录,并将该目录的(绝对)路径添加到加载路径.因此,当执行查找时require,将找到文件.

  • `require'./ somelogic'`和`require_relative'somelogic'`之间有一个重要的区别.后者查找相对于脚本本身*的文件*,而前者查找当前工作目录.想象一下,我们在一个名为"project"的目录中运行Ruby程序"scripts/do_the_thing.rb".如果"do_the_thing.rb"使用`require_relative`,它将查找"project/scripts/somelogic.rb".另一方面,如果我们写了'require'./ somelogic'`,它会寻找"project/somelogic.rb". (6认同)