【Lua】ぼくの失敗(エラー)【TIC-80】


はじめに

皆さん、エラーは出していますか?
自分は1年少し前から「TIC-80」で遊んでいますが、
ここ半年くらいで出したエラーを雑に集計してみました。

AdventCalender関係なしにクリスマスイブにこんな記事投稿するなんて
人生のエラーが多いんじゃないですかね?

  • 環境は「Lua5.3 in TIC-80 0.70.6」
  • Lua(5.1)自体はAviUtlのスクリプトで少し触った経験あり
  • TIC-80を触っているのは1年ちょい
  • ここ半年間ほどで出したエラー

attempt to index a nil value (61回)

直訳:nil値をインデックスしようとしました
意訳:nil値に対し添字やキーを指定している


tbl={
  {7, 8, 9},
  {4, 5, 6},
  {1, 2, 3}
}

print(tpl[2][2])
--> attempt to index a nil value (global 'tpl')
print(tbl[0][2])
--> attempt to index a nil value (field '?')

一つ目のようにテーブルの名前を間違えてもでますし、
二つ目のように tbl[0]nilを返す場合でも前半は同じメッセージですね。

二次元フィールド上のパズルゲームや経路探索のプログラムを組んでいたので、
おおよそ二つ目の範囲外指定に近い形でのエラーだった思います。
というか別々に集計すべきでしたね、いきなりガバってますね、大丈夫か?

[attempt] ~ a nil value (48回)

arithmetic on a nil value ~
concatenate a nil value ~
get length of a nil value ~
compare number with nil ~
call nil value ~

nil値に対する操作で index 以外をまとめました。
それぞれnilに対し算術演算文字列連結長さ取得比較演算をしようとしている(できないよ)

  • 変数の初期化忘れ
  • 単純なタイプミス

だいたいこの2つが原因(のはず)です。
そういえば(コルーチンの)スレッド内でcoroutine.yield()と書くべきところを
coroutine.yeild()とタイプミスしてもcall nil valueのエラーを出してくれなかった気がします。

~ expected near ~ (16回)

'end' expected near ~
')' expected near ~
']' expected near ~

end)]が~の近くに期待されています(ないとおかしいよ!)
ブロックや括弧の閉じ忘れですね。

syntax error near ~ (18回)

syntax error near ~
unexpected symbol near ~
'then' expected near ~

~の近くに文法エラー
~の近くに期待されないシンボルがある
~の近くにthenが期待される(ないとおかしいよ)

ここら辺はまとめて初歩的な文法誤り(記述漏れやタイプミス)

invarid param~ , bad argument ~ (15回)

不正なパラメーター、引数

関数の引数の指定のミスですね。
ホストプログラム(ここではTIC-80)が用意したAPI(前者?)や
標準ライブラリ(後者?)などは引数が不正ならこのようなメッセージを出してくれる。

'for' limit must be a number ~ (2回)

for の制限は数値でなければならない

はい。

attempt to call ~ (4回)

attempt call a table value (7回)

テーブルを(関数)呼び出ししようとした(できないよ)

関数でないものに対し関数呼び出しをしようとするとこのメッセージですね。
for n,v in ipairs(tbl) doと書くべき所で、
ipairsを忘れると後者のメッセージになります。

これも別集計すべきだったのではないでしょうかねぇ。

attempt to arithmetic on a table value ~

テーブルに対して算術演算をしようとしてるよ

cannot resume dead coroutine (8回)

死んだ(終了した)コルーチンは再開できません。

ステージクリア演出をコルーチンで書いていたときのエラーだったと思います。
最後を何か入力あるまで待つ無限ルーチン(1フレームごとにyield)にしたんだったかな。
コルーチンを最初からしたい場合は定義しなおす必要があるんでしょうか?

Lua5.4ではコルーチンにリセット機能が追加されるっぽい?

まとめ

他にもちょこちょこあった気がしますがこの辺で。
めっちゃ雑な集計ですみません。
テーブル周りは多いですね。縦横ループするマップでのA*アルゴリズム経路探索など
分不相応なものにも手を出してたりしたので。ちゃんと考えてから書けば少しはましになる‥‥はず。

その他は初歩的なものばっかりです。まるで成長していない‥。

みなさんはどんなエラーをどれくらいの頻度で出してるのでしょうか?
興味あります!