将静态方法隔离到模块中?有可能? "未定义的方法"

时间:2014-07-10 13:33:58

标签: ruby

我试着理解模块......

我想在一个模块中隔离很多方法(只使用Namemodule.methodname访问它们)

这是我的代码:

domparser.rb

module Domparser

   def method1 name

      puts "Ok : method1" + name

   end

    def method2

      method1("John")
      puts "Ok : method2 without name"

   end

    def method3

      method2
      puts "Ok : MAIN METHOD"

   end

end

main.rb的

require("./domparser.rb")

Domparser.method3

但是=> undefined method 'method3' for Domdecoder:Module (NoMethodError)

我有其他方法叫做“method1”和“method2”,这就是我想将它们分离成模块的原因。

method3是我想在外面打电话的唯一方法。

谢谢。

2 个答案:

答案 0 :(得分:2)

module_function用于您希望直接在模块上访问的方法

module Domparser
   def method1 name
      puts "Ok : method1" + name
   end

    def method2
      method1("John")
      puts "Ok : method2 without name"
   end

    def method3
      method2
      puts "Ok : MAIN METHOD"
   end

   module_function :method3
end

现在,您可以访问模块上的method3以及

上包含此模块的类上的实例方法
Domparser.method3

有关module_function here

的更多信息

答案 1 :(得分:1)

好的,我将每个方法都放在一个类中,并且在方法名称前面有self.

class Domparser

   def self.method1 name

      puts "Ok : method1" + name

   end

    def self.method2

      method1("John")
      puts "Ok : method2 without name"

   end

    def self.method3

      method2
      puts "Ok : MAIN METHOD"

   end

end

它有效。

Domparser.method3