Pythonだと、条件分岐は
if (expression): print("expression is true.") else: print("expression is false.")
という書式でexpression
が真(True)になる条件は主に
数値 | 文字列 | 真偽値 | オブジェクト |
---|---|---|---|
not 0 | not “” | True | not None |
となる。偏見ではあるがJava言語や他言語でも大体同じイメージ。
しかし、VimやAwesome WMの設定で用いているLua言語はここら辺が少々ややこしい。
条件分岐の制御構文自体は、
if (expression) then print("expression is true.") else print("expression is false.") end
といった書式で見慣れたものだ。ただし、expression
が真となる条件は
数値 | 文字列 | 真偽値 | オブジェクト |
---|---|---|---|
すべて | すべて | true | not nil |
である。数値0であっても空文字であってもtrueが返ってくる。逆を言えば偽(flase)となるのはfalse
またはnil
のときだけである。
また、未定義の変数もnilとなるので「存在するか不明なboolean型変数valの真偽判定をしたい」といった場合は、
not (val == nil)
または
val ~= nil
で判定する。(Lua言語での”not equal”は!=
でなく~=
であることにも注意)
他にも配列のインデクスが1から始まる、ArrayとHashの混同したテーブルといった初見で躓かせる仕様がLua言語には多い気がする。
余談ではあるけれど、NeoVimでLua言語のコメントのシンタックスハイライトが
-- [[ コメント -- ]]
でも適用されるのは不具合だろうか。--[[
で1トークン、]]
までの複数行コメントアウトのはずだが空白を含んだ-- [[
でも適用されてしまう。--
自体は1行コメントアクトなのでコメント
部分が実際には無視されない点以外で構文上のエラーが発生しないのがミソ。最初気づかなかった。
nvim-treesitterが悪さをしているのかもしれない。時間に余裕があるときに調べてみようと思う。
コメント