LUAのandとor
696 ワード
論理演算子はfalseとnilが偽(false)であり、その他は真であり、0もtrueであると考えている.andの優先度がorより高い他の言語のandは両方が本当であることを示す場合、やっと真に戻り、偽が1つあれば偽に戻る.luaは偽の意味を返すだけでなく、偽の値を返す.すなわち、a and bは、aがfalseの場合、aを返す、そうでなければb.orを返す処理はこれと同様である、a or bは、aがtrueの場合、aを返す、そうでなければb.を返す、つまり、andとorが返すのはtrue/falseの意味だけでなく、その値も返す.
false true true true正しい案は書くのが複雑すぎて、かえって巧みに下手になった.luaには言語内蔵のサポートがないので、通常のif/elseに移行しましょう.もちろん,符号化者がc and a or bのaが必ず真であると断言できれば,直接このような書き方を使っても間違いないが,これはhackであり,推奨に値しない.
a = nil
b = 1
exp = 1 < 2 and a or b
print(exp == a) --fales
exp = 1 > 2 and a or b
print(exp == b) --true
exp = (1 < 2 and {a} or {b})[1]
print(exp == a) --true
exp = (1 > 2 and {a} or {b})[1]
print(exp == b) --true
false true true true正しい案は書くのが複雑すぎて、かえって巧みに下手になった.luaには言語内蔵のサポートがないので、通常のif/elseに移行しましょう.もちろん,符号化者がc and a or bのaが必ず真であると断言できれば,直接このような書き方を使っても間違いないが,これはhackであり,推奨に値しない.