配列リテラルでカンマを付け忘れたときの SyntaxError
配列の要素を並べる際、区切りのカンマを付け忘れると、次の要素が「予期しないトークン」として構文エラーになります。
エラーメッセージの読み方
main.rb:1: syntax error, unexpected integer literal, expecting ']' (SyntaxError)
main.rb- ファイル名
1- 行番号 — Rubyが構文解析を諦めた位置
SyntaxError- エラー種別 — 実行前の構文チェックで検出されました
syntax error, unexpected integer literal, expecting ']'- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 nums = [1, 2 3] ^ 2 puts nums.sum
main.rb:1: syntax error, unexpected integer literal, expecting ']' (SyntaxError)
nums = [1, 2 3]
^
配列の要素はカンマで区切ります。スペースだけでは区切りとして認識されず、次の要素が予期しないトークンになります。
直し方: (空) を , にします。
広告
広告スロット(未設定)
パターン2
1 prices = [100, 200 300] ^ 2 puts prices.sum
main.rb:1: syntax error, unexpected integer literal, expecting ']' (SyntaxError)
prices = [100, 200 300]
^~~
数値を並べるだけの配列でも、区切りのカンマは省略できません。
直し方: (空) を , にします。
パターン3
1 temps = [36.5, 37.2 38.0] ^ 2 puts temps.max
main.rb:1: syntax error, unexpected float literal, expecting ']' (SyntaxError)
temps = [36.5, 37.2 38.0]
^~~~
小数の配列でも同様にカンマが必要です。要素の型が変わってもルールは変わりません。
直し方: (空) を , にします。
パターン4
1 scores = [10, 20 30, 40] ^ 2 puts scores.max
main.rb:1: syntax error, unexpected integer literal, expecting ']' (SyntaxError)
scores = [10, 20 30, 40]
^~
複数箇所カンマがある配列でも、抜けている1箇所だけでエラーになります。
直し方: (空) を , にします。
パターン5
1 flags = [true, false true] ^ 2 puts flags.count(true)
main.rb:1: syntax error, unexpected `true', expecting ']' (SyntaxError)
flags = [true, false true]
^~~~
真偽値の配列でもカンマ区切りは必須です。true/falseのようなキーワードでも例外はありません。
直し方: (空) を , にします。
よくある誤解
スペースで区切って書いても、Rubyはそれを要素の区切りとして認識しません。区切りには必ずカンマが必要です。
まとめ
配列リテラルでカンマを付け忘れたときの SyntaxErrorは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。