rubyの演習課題がわからないと、とある学生から質問があり対応。
エラーがなかなかわからない。。。私自身、rubyでの指導経験がないため(自分で起こしたことがないような)エラーメッセージへの対応はまだまだ不足しています。
エラーの原因は全角空白でした。
実験まで以下のプログラムに1行ずつ全角空白をいれてエラーメッセージをみてみましょう。見やすさのため全角空白の場所に★を記します。
★# while true a = gets.chomp case a when "1" break end end
入力前に以下のエラーが発生する。
a.rb:1:in `
# ★while true a = gets.chomp case a when "1" break end end
入力前に以下のエラーが発生する。
a.rb:8: syntax error, unexpected keyword_end, expecting end-of-input
# while true ★ a = gets.chomp case a when "1" break end end
入力したあとに以下のエラーが発生する。
a.rb:3:in `
# while true a = gets.chomp ★ case a when "1" break end end
1を入力したときには正常終了する!? 1以外の入力のときに以下のエラーが発生する
a.rb:4:in `
# while true a = gets.chomp case a ★ when "1" break end end
入力前に以下のエラーが発生する。これはかなりわかりやすい!
a.rb:5: syntax error, unexpected tIDENTIFIER, expecting keyword_when
when "1"
^
a.rb:8: syntax error, unexpected keyword_end, expecting end-of-input
# while true a = gets.chomp case a when "1" ★ break end end
入力前に以下のエラーが発生する。エラーが直感的にわかりにくい。。。
a.rb:6: void value expression
# while true a = gets.chomp case a when "1" break ★ end end
1でも1以外の入力に対しても正常に動作する。エラーはでない!?
# while true a = gets.chomp case a when "1" break end ★end
入力前に以下のエラーが発生する。
a.rb:8: syntax error, unexpected end-of-input, expecting keyword_end
バリエーションが結構ありますね。。。たかが全角空白なんですが。JavaではEclipseなどが全角表示を教えてくれるのでこの問題の対応は楽でした。
ruby会議か何かの動画で東大でRubyを教えている方が講演されているのを見たことがありますが、確かdo〜endの対応を見つけるのがシンドイと言われていたと思います。確かにやってみるとシンドイ。。。今、使っているcloud9のエディタ(Ace)がRubyの整形に対応していないためシンドイ。
オンライン講座とかではどーしているのかなぁ?
対処方法を考えないと。。。