はじめに
Rubyでコードを書いていて発生したエラーを自分用にまとめてみました。
NameError
定義されていない変数や定数を呼び出そうとすると発生するエラー。
呼び出す変数の名前を間違ったりしてよく起こしました。
変数名の間違い
name = "Taro"
#nameがnamaになっている
p nama
出力
undefined local variable or method 'nama' for ...(NameError)
NoMethodError
メソッド名を間違えた時や、呼び出せないメソッドを呼び出そうとしたときに発生するエラー。
個人的にはレシーバが想定に反してnilになっている場合が多かったです。
メソッド名の間違い
a = [1, 2, 3]
#eachがeechになっている
a.eech do |n|
sum += n
end
出力
undefined method `eech' for ... (NoMethodError)
privateメソッドをクラス外部から呼び出す
class Private
private
def secret
"秘密"
end
end
private = Private.new
p private.secret
出力
private method `secret' called for ... (NoMethodError)
レシーバがnilだった場合
a = nil
a.push(1)
出力
undefined method `push' for nil:NilClass (NoMethodError)
TypeError
整数と文字を足そうとしたときのように、期待しない型がメソッドの引数に渡されたときに出るエラー。
1と' 1 'を足す
1 + '1'
出力
String can't be coerced into Intager (TypeError)
ArgumentError
引数の数が違ったり、期待する値でなかったときに発生するエラー。
メソッドの引数が違う
def sum(a, b, c)
a + b + c
end
#引数が少ない
sum(1, 2)
出力
wrong number of arguments (given 2, expected 3) (ArgumentError)
SyntaxError
endやカンマの数が足りなかったり、カッコが閉じられていなかったときに発生するエラー。
endが足りない
a = nil
if a == nil
p "何もなかった!"
出力
syntax error, unexpected end-of-input, expecting `end'