Lua の復習とかしてみる その 2

2.1

if 文の書き方。普通の構文。
「≠」は「 ~= 」と書く。

if bool1 then
  --  処理 1
elseif bool2 then
  --  処理 2
else
  --  処理 3
end
2.2

while ループ。

while bool1 do
  if bool2 then
    break
  end
end

for ループ。
ここで宣言している i のスコープは for の中だけ。

for i = 1, 10 do  --  for i = 1, 10, 2 do って書き方とかも出来る
  print(i)
end

repeat-until 文。
C/C++ で言うところの do-while 文。

repeat
  --  何か処理
until bool
2.3

配列の話。

  • Lua の配列は table の特別な形。
  • ちなみに可変長。宣言時に要素数を書く必要がない。
  • Lua の場合、配列のインデックスは 1 から始めるのが通例。
  • 存在しない要素にアクセスした場合、 nil が返る。
  • 配列の要素数は table.getn(テーブル名) で得られる。(配列のインデックスの最大値が得られる)
2.4

boolean の話。

  • not 演算子で論理値の反転。
  • 論理積は and 、論理和は or で取れる。
  • Lua では false と nil 以外の値は全て「真」。空文字列、空テーブルも真。
  • or はデフォルト値を設定するのにも使える。
2.5

合計を求めるプログラム。
本のサンプルをここまでの知識を使って微妙に改造。

list = { 310, 260, 270, 440 }
sum = 0
for i = 1, table.getn(list) do
  sum = sum + list[i]
end
print(sum)

配列の 0 番目の要素にアクセスしようとしてて、なかなか動かなかったということは内緒。つい数分前に読んだ Lua の配列の通例の話をもう忘れているとかアホ過ぎる。
ちなみにこんな感じのエラーが返ってくる。

lua: 2_5.lua:4: attempt to perform arithmetic on field '?' (a nil value)

*追記
上のエラーなんだけど、気になって再現してみようと思った。
でも 0 番目の要素にアクセスしようとしても nil が返ってくるだけで、その後の処理はちゃんと動くね。
何が原因のエラーだったんだろう。
今となってはエラーを吐いたコードも存在せず、エラーの原因を追いようがない。
ありそうなのは文字コード絡みのエディタのバグかなぁ。
OCaml で遊んでたときもなったことあるし。