モジュールメソッドはNoMethodErrorを返します

ディラン・フライ

指定されたパラメーターでハッシュを返すメソッドをモジュール内に作成しようとしています。

module MyModule

  def self.my_method(*search_params)
    # do something...

    end
    self
  end
end

これについて同様の質問をたくさん見ました。問題はインスタンスメソッドを定義しているためですが、定義でselfを呼び出してエラーを受け取り続けたため、別の問題である可能性があると思いました。

@example = { :name => 'John', :quote => 'Great fun!', :rank => 5 }
@example.my_method(:name => 'John') 

NoMethodError: undefined method `my_method` (NoMethodError)
lacostenycoder

ロジックが意味をなさないため、メソッドが何をしようとしているのか理解できませんが、メソッドをHashクラスに追加する方法は次のとおりです。

module MyModule
  def my_method(*search_params)
    puts "search params: #{search_params}"
  end
end


class Hash
  include MyModule
end

@example = { :name => 'John', :quote => 'Great fun!', :rank => 5 }
@example.my_method(:name => 'John')

#=>search params: [{:name=>"John"}]

ただし、これは「モンキーパッチ」と呼ばれ、お勧めできません。おそらく継承を使用する方が良いでしょう

module MyModule
  def monkey(*search_params)
    puts "search params: #{search_params}"
  end
end


class MonkeyHash < Hash
  include MyModule
end

@example = MonkeyHash.new(:name => 'John', :quote => 'Great fun!', :rank => 5)
@example.monkey(:name => 'John')

@example = { :name => 'John', :quote => 'Great fun!', :rank => 5 }

begin
  @example.monkey(:name => 'John')
rescue NoMethodError => e
  puts "Calling @exmaple.my_method raiesed: "
  puts e
  puts "@example is an instance of #{@example.class}. You may want to use MonkeyHash"
  puts "which includes the instance method 'monkey'"
end

または、シングルトンメソッドを定義することもできます

puts "let's try it with a singleton method\n\n"

@singleton_example = { :name => 'John', :quote => 'Great fun!', :rank => 5 }

@singleton_example.define_singleton_method(:monkey) do |*search_params|
  puts "search params: #{search_params}"
end

puts "now @example has the monkey method see: \n"
@singleton_example.monkey(:name => 'John')
puts "@singleton_example is still an instance of #{@singleton_example.class}"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rubyのモジュール内でメソッドを定義する(NoMethodError)

分類Dev

Pythonモジュールはサブモジュールメソッドを呼び出します

分類Dev

APIメソッドを取得する-クラスまたはモジュール

分類Dev

同じモジュール内の「ネストされたメソッド」(またはdef)にアクセスしようとしたときのNoMethodError

分類Dev

RailsヘルパーメソッドはNilClassを返します

分類Dev

名前付きモジュールのクラスの名前なしモジュールを返すメソッドgetModule

分類Dev

find()メソッドを使用すると、ルートは空のモデルを返します

分類Dev

モジュールメソッドがノードjsに存在するかどうかを確認します

分類Dev

演算子なしでモジュールメソッドに直接アクセスします( '。'または '::')

分類Dev

モジュール内にグローバルRailsメソッドを作成しますか?

分類Dev

ジュリアの辞書メソッド `haskey`は、キーが存在する場合にfalseを返します

分類Dev

Rubyのモジュールメソッドで再利用するためにモジュールにデータを設定する方法はありますか?

分類Dev

現在のモジュールを設定して、rspecでモジュールメソッドを呼び出すにはどうすればよいですか?

分類Dev

Rubyでモジュールメソッドを改良する方法は?

分類Dev

PHPでクラスメソッドをモジュール化する方法は?

分類Dev

NodeJS MySQLモジュールのescape()/ escapeId()メソッドはどのように機能しますか?

分類Dev

モジュールメソッドとしてasyncawaitを使用する方法

分類Dev

Pythonのメソッドに対応するモジュールを検索します

分類Dev

F#-モジュール内のメソッドのリストを取得します

分類Dev

モジュールで明示的に定義されたメソッド/関数のリストを取得します

分類Dev

Pythonモジュールにある既存のメソッドに操作を追加します

分類Dev

テスト対象のメソッドにインポートされたモジュールからメソッドにパッチを適用します

分類Dev

ルビーのモジュールでメソッドをモックする方法は?

分類Dev

ループバック mongo は get の結果を返しますが、リモート メソッドの結果は返しません

分類Dev

迅速なエラー:「centralManager」の使用は、モジュール内のvar「centralManager」ではなくインスタンスメソッドを参照します

分類Dev

NodeJS 13は、matchなどのメソッドが欠落しているモジュールをアサートします

分類Dev

ES6モジュール:単一クラスの静的メソッドまたは複数の個別メソッドをエクスポートする

分類Dev

モジュールをスレッド化して機能を繰り返した後、コンソールをクリアします

分類Dev

結果とモジュロを返すメソッド

Related 関連記事

  1. 1

    Rubyのモジュール内でメソッドを定義する(NoMethodError)

  2. 2

    Pythonモジュールはサブモジュールメソッドを呼び出します

  3. 3

    APIメソッドを取得する-クラスまたはモジュール

  4. 4

    同じモジュール内の「ネストされたメソッド」(またはdef)にアクセスしようとしたときのNoMethodError

  5. 5

    RailsヘルパーメソッドはNilClassを返します

  6. 6

    名前付きモジュールのクラスの名前なしモジュールを返すメソッドgetModule

  7. 7

    find()メソッドを使用すると、ルートは空のモデルを返します

  8. 8

    モジュールメソッドがノードjsに存在するかどうかを確認します

  9. 9

    演算子なしでモジュールメソッドに直接アクセスします( '。'または '::')

  10. 10

    モジュール内にグローバルRailsメソッドを作成しますか?

  11. 11

    ジュリアの辞書メソッド `haskey`は、キーが存在する場合にfalseを返します

  12. 12

    Rubyのモジュールメソッドで再利用するためにモジュールにデータを設定する方法はありますか?

  13. 13

    現在のモジュールを設定して、rspecでモジュールメソッドを呼び出すにはどうすればよいですか?

  14. 14

    Rubyでモジュールメソッドを改良する方法は?

  15. 15

    PHPでクラスメソッドをモジュール化する方法は?

  16. 16

    NodeJS MySQLモジュールのescape()/ escapeId()メソッドはどのように機能しますか?

  17. 17

    モジュールメソッドとしてasyncawaitを使用する方法

  18. 18

    Pythonのメソッドに対応するモジュールを検索します

  19. 19

    F#-モジュール内のメソッドのリストを取得します

  20. 20

    モジュールで明示的に定義されたメソッド/関数のリストを取得します

  21. 21

    Pythonモジュールにある既存のメソッドに操作を追加します

  22. 22

    テスト対象のメソッドにインポートされたモジュールからメソッドにパッチを適用します

  23. 23

    ルビーのモジュールでメソッドをモックする方法は?

  24. 24

    ループバック mongo は get の結果を返しますが、リモート メソッドの結果は返しません

  25. 25

    迅速なエラー:「centralManager」の使用は、モジュール内のvar「centralManager」ではなくインスタンスメソッドを参照します

  26. 26

    NodeJS 13は、matchなどのメソッドが欠落しているモジュールをアサートします

  27. 27

    ES6モジュール:単一クラスの静的メソッドまたは複数の個別メソッドをエクスポートする

  28. 28

    モジュールをスレッド化して機能を繰り返した後、コンソールをクリアします

  29. 29

    結果とモジュロを返すメソッド

ホットタグ

アーカイブ