4

==とに加えて<、Lua には<=オペコードとメタメソッド ( OP_LETM_LE) があります。

ドキュメンテーションはそれを言う

"le" メタメソッドがない場合、Lua は a <= b が not (b < a) と同等であると仮定して、"lt" を試行します。

しかし、そもそもなぜ「<=」があるのでしょうか? not (b < a)常にforを使用できないのはなぜa <= bですか?

アップデート:

DSL や「言語フック」などがすべてだとしたら、なぜ Lua には~=、、、>および>=オペコードとメタメソッドがないのでしょうか?

4

2 に答える 2

3

not (b < a)a <= bは同等ではありません。

数値 (つまり、組み込みの浮動小数点型) の場合、NaNsがあると異なる結果が得られます。

a = 0/0
print(a) -- nan
print(a <= a) -- false
print(not(a < a)) -- true

同じように動作する独自の BCD または複素数型を定義する場合は、両方のメタメソッドを使用する必要があります。だけを定義しても同じ効果は得られません<

これは には当てはまりませんがa ~= b、実際には と同等not (a == b)です。

print(not(a == a)) -- true
print(a ~= a) -- true
于 2013-04-29T12:21:43.497 に答える