3

我必须 Ruby 文件:一个包含一个模块,其中包含一些用于统计计算的方法,在另一个文件中我想调用模块中的一个方法。我怎样才能在 Ruby 中做到这一点?

那是正确的方法吗?

require 'name of the file with the module'

a=[1,2,3,4]
a.method1
4

2 回答 2

7

Require 需要文件的绝对路径,除非文件位于 Ruby 的加载路径之一。您可以使用 查看默认加载路径puts $:。通常执行以下操作之一来加载文件:

将主文件的目录添加到加载路径,然后将相对路径与 require 一起使用:

$: << File.dirname(__FILE__)
require "my_module"

仅加载单个文件的 Ruby 1.8 代码通常包含单行代码,例如:

require File.expand_path("../my_module", __FILE__)

Ruby 1.9 添加了 require_relative:

require_relative "my_module"

在模块中,您需要将方法定义为类方法,或使用 Module#module_function:

module MyModule
  def self.method1 ary
    ...
  end

  def method2
    ...
  end
  module_function :method2
end

a = [1,2,3,4]
MyModule.method1(a)
于 2012-04-24T18:00:18.397 回答
2

Your way is correct if your module file is in the require search path.

If your module provide methods to be used by the object itself, you must do:

require 'name of the file with the module'

a=[1,2,3,4]
a.extend MyModule   # here "a" can use the methods of MyModule
a.method1

See Object#extend.

Otherwise, if you'll use the methods directly by the module, you'll use:

MyModule.method1(a)
于 2012-04-24T18:24:55.780 回答