6

ここで間違いを犯しているに違いありません。以下のRubyコードを書きました。

module Foo
   def bar(number)
      return number.to_s()
   end
end
puts Foo.bar(1)

test.rb:6:in <main>': undefined methodbar' for Foo:Module (NoMethodError)

Foo.bar というモジュールで単一のメソッドを定義したいと考えています。ただし、コードを実行しようとすると、未定義のメソッド エラーが発生します。私は何を間違っていますか?

4

2 に答える 2

9

あなたはできる:

module Foo
   def self.bar(number)
      number.to_s
   end
end
puts Foo.bar(1)
于 2013-04-24T01:41:30.087 に答える
5

Ruby のすべてのモジュールは、オブジェクトに混在させることができます。クラスが objectになると、 extendという単語を使用してクラス内のメソッドを混在させることができます。

module Foo
  def bar
    'bar'
  end
end

class MyInstanceMethods
   include Foo
end

class MyClassMethods
   extend Foo
end

## Usage:
MyInstanceMethods.new.bar
=> "bar"

MyClassMethods.bar
=> "bar"

bar メソッドを Foo モジュールから直接呼び出したい場合は、@xdazz が書いたのと同じ方法で実行できますが、extendワードが Class に混在するためです。

MyInstanceMethods.class
=> Class

MyClassMethods.class
=> Class

Module.class
=> Class # Hey, module is also a class!!!!!

トリック:

module Foo
  extend self # self of Foo is the Module!

  def bar
    # .....
  end
end

これで、 Foo.barが期待される結果を返すことがわかります:P

于 2013-04-24T03:06:47.043 に答える