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が悪さをしているのかもしれない。時間に余裕があるときに調べてみようと思う。

コメント