2018/11/16(金) [n年前の日記]
#3 [prog] Luaにcontinueが無いのがツライ
Lua というプログラミング言語には、ループを制御する continue文が無い。
_break文とcontinue文
_continue文 - Wikipedia
_Tips/continue - Lua Memo
_Luaには『continue』は存在しない | とど。
地味にツライ。ループ内の記述が結構グチャグチャになる…。
Lua でもどうにかして continue を使えないかという質問に対して、こういうやり方はどうかと提案してる事例を見かけた。
_loops - Why does Lua have no "continue" statement? - Stack Overflow
どれもなんだかしっくりこない…。
一般的には、continue を呼び出す条件判定に not をつけて、if文で処理を囲むというのが定番だろうけど。Lua 5.2 から goto文が追加されたので、continue というラベルを作ってどうにかする方法が提示されていた。
そういえば、love2d は Lua 5.1相当(LuaJIT)を内蔵してたはずなので、この記述はできないだろうな…。
_Lua 5.1.2 is goto statement possible? - LoVE
_Why isn't Love 0.8.0 on Lua 5.2? - LoVE
_Lua 5.2 released, is there a plan to use it? - LoVE
いや、どうかな。 _LuaJIT Change History を眺めると、LuaJIT 2.0.0-beta11 - 2012-10-16 の時点で Lua 5.2 の goto/labels を追加した、と書いてある。
Windows10 x64 + love2d 11.1 では、LuaJIT 2.0.5 が内蔵されてるっぽいので…。もしかすると goto も使えるのかな…。そのうち試してみよう…。
_break文とcontinue文
_continue文 - Wikipedia
_Tips/continue - Lua Memo
_Luaには『continue』は存在しない | とど。
地味にツライ。ループ内の記述が結構グチャグチャになる…。
Lua でもどうにかして continue を使えないかという質問に対して、こういうやり方はどうかと提案してる事例を見かけた。
_loops - Why does Lua have no "continue" statement? - Stack Overflow
どれもなんだかしっくりこない…。
一般的には、continue を呼び出す条件判定に not をつけて、if文で処理を囲むというのが定番だろうけど。Lua 5.2 から goto文が追加されたので、continue というラベルを作ってどうにかする方法が提示されていた。
for i=1,10 do if i % 2 == 0 then goto continue end print(i) ::continue:: end手元の環境、Windows10 x64 + Lua 5.3.4 で試してみたけど、たしかに動いた。
そういえば、love2d は Lua 5.1相当(LuaJIT)を内蔵してたはずなので、この記述はできないだろうな…。
_Lua 5.1.2 is goto statement possible? - LoVE
_Why isn't Love 0.8.0 on Lua 5.2? - LoVE
_Lua 5.2 released, is there a plan to use it? - LoVE
いや、どうかな。 _LuaJIT Change History を眺めると、LuaJIT 2.0.0-beta11 - 2012-10-16 の時点で Lua 5.2 の goto/labels を追加した、と書いてある。
Windows10 x64 + love2d 11.1 では、LuaJIT 2.0.5 が内蔵されてるっぽいので…。もしかすると goto も使えるのかな…。そのうち試してみよう…。
[ ツッコむ ]
以上です。