Ruby で未定義のメソッドを修正

Nurudeen Ibrahim 2023年6月21日
Ruby で未定義のメソッドを修正

この記事では、Ruby プロジェクトで最も一般的なエラーである未定義メソッドの修正について説明します。

Ruby で未定義のメソッドを修正

未定義のメソッドは NoMethodError 例外とも呼ばれ、The 2022 Airbrake Error Data Report によると、プロジェクト内で最も一般的なエラーです。

レシーバー (オブジェクト) が存在しないメソッドを受け取ったときに発生します。

組み込みオブジェクトの未定義のメソッド

以下のコードは、未定義のメソッド maximum を呼び出した場合に配列オブジェクトで NoMethodError エラーをトリガーする方法を示しています。

コード例:

arr = [1, 2, 3, 7, 4]
puts arr.maximum

出力:

undefined method `maximum' for [1, 2, 3, 7, 4]:Array (NoMethodError)

カスタム オブジェクトの未定義のメソッド

以下のコードは、カスタム オブジェクトで NoMethodError エラーをトリガーする方法を示しています。

コード例:

class Employee
  def initialize(last_name, first_name)
    @last_name = last_name
    @first_name = first_name
  end

  def full_name
    "#{@first_name} #{@last_name}"
  end
end

employee1 = Employee.new('John', 'Doe')
puts employee1.fullname

出力:

undefined method `fullname' for #<Employee:0x0000565026778608> (NoMethodError)
Did you mean? full_name

上記の例では、full_name の代わりに意図的に fullname を使用したため、Ruby は一致するものを見つけることができませんでしたが、非常に似ている名前を見つけました。 したがって、もしかして? full_name がエラー トレースバックに追加されました。

関連記事 - Ruby Method