Code Fix

初級

配列リテラルでカンマを付け忘れたときの 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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)