3

私は最初のRubyモジュールを書いていますが、これがあります。

/app/module/test_modules/test.rb

test.rbは次のようになります。

module TestModules
  module Test

    def test
      puts 'this is a test'
    end
  end
end

コンソールから次のように呼び出すと、次のようになります。

(main)> TestModule::Test.test
//NoMethodError: private method `test' called for TestModules::Test:Module

test()を表示するにはどうすればよいですか?

4

4 に答える 4

3

testインスタンスメソッドとして定義したのに対し、クラスメソッドを呼び出しています。includeまたはを介してモジュールを使用した場合は、好きなように呼び出すことができますextendこの記事はうまく説明しています。

module TestModules
  module Test
    def self.test
      puts 'this is a test'
    end
  end
end
于 2012-09-04T14:49:59.877 に答える
1

また、

1)

module TestModules
  module Test
    def test
      puts 'this is a test'
    end

    module_function :test
  end
end

2)

module TestModules
  module Test
    extend self
    def test
      puts 'this is a test'
    end
  end
end
于 2012-09-04T14:51:09.820 に答える
1

メソッドを定義した方法では、これはのインスタンスのメソッドです。Testしたがって、次のようにすると機能します。

blah = TestModule::Test.new
blah.test

-そしてこのように使用する場合は、ではなくTestとして定義する必要がありますclassmodule

関数をクラス自体で機能させる場合は、次のように定義する必要があります。

def self.test
    ....
end

そして、あなたはすることができますTestModules::Test.test

于 2012-09-04T14:51:28.737 に答える
0

定義したテストメソッドはインスタンスメソッドです...これを試してください

module TestModules
  module Test
    def self.test
      puts 'this is a test'
    end
  end
end

これで、このTestModules::Test.testによってメソッドを呼び出すことができます。

于 2012-09-04T14:49:29.157 に答える