语法添加 |
|
"llex.c"
中的函数llex
和数组luaX_tokens
进行微小的更改,我们可以实现与C、Java
Script和其他语言相同的语法,用于“非”和“不等于”运算符。
在对Lua源代码进行以下更改后,我们可以编写
if !b then a = c end if a != c then a = c end
它仍然可以使用原始代码
if not b then a = c end if a ~= c then a = c end
我同意使用!=
,特别是由于~=
在其他地方并不常用,并且可能与Perl的=~
混淆。但是,使用!
表示not
不好,因为它违反了Lua使用单词而不是符号的规则(与and
和or
进行比较)。-- ReubenThomas
~
是逻辑否定[1]的有效数学符号。在编程语言中,它不太常见。但是,即使在像C这样的语言中,~
也用于密切相关的按位否定,而!
用于逻辑否定,!=
用于不等式(即!(a==b)
)。因此,Lua的~=
具有一定的相似性。但是,C在按位运算和逻辑运算之间不一致:&
和&&
,|
和||
,以及~
和!
-- 为什么不使用~~
表示逻辑否定以避免使用不同的字符?在Lua中,您可以选择使用not(a==b)
。-- DavidManura
或者,也许可以使用<>
,就像Basic一样... 这样只需要三个比较字符<, >, =
来进行所有测试。~
字符在Lua中是唯一的,因为它是在Lua中唯一一个以多字符词法项开头但本身不是多字符词法项的字符!此外,<>
与<=
的使用方式相匹配,因此x<=y
表示x<y or x=y
,而x<>y
表示x<y or x>y
。一致性。-- PeterHill
<>
表示不等式是一个糟糕的想法。对于某些数据,<
和>
可能根本没有意义。例如,对于空间中的点,您可以定义相等和不等,但没有线性排序。但是,您可能仍然希望对点的(不)相等进行测试,而<>
可能会产生误导。-- Hgr
只有在您有完整的[2]排序时,它才是一致的。否则,<
、>
和==
这三个都可能为假。即使~
在我的西班牙语Windows键盘上令人讨厌地难以输入(我目前正在使用它来编写此消息),我已经习惯了它——我当然不想更改所有我正在使用的代码。总有一天,我们都会使用Unicode,并且能够使用&U+2260;
,它拒绝在此Wiki上渲染自己。-- RiciLake
使用!
作为否定肯定会使大多数其他语言的程序员更容易学习Lua。还有哪些语言使用~
作为否定?这很奇怪,特别是当~
在其他语言中用于否定以外的其他事物时。没有人说要替换~
作为否定,只是添加!
作为替代。因此,您所有现有的代码都将继续完美运行,并且无需进行任何更改。--DanHollis?
值得一提的是:Smalltalk、Dylan 和 Matlab 都使用 `~=` 来表示某种不等式,根据 [跨语言语法] 页面。(它们也使用 `~` 作为逻辑非的前缀。)据我了解,用 `~` 前缀来表示逻辑否定(在数学意义上)相当普遍,因此使用 `~=` 来表示不等价似乎是一个非常自然的扩展。--TaylorVenable
支持这两种符号,如上所述,会使原本简单的语言变得复杂。-- DavidManura
在某些键盘上,`~` 很难找到和使用。例如,在 azerty 上,您需要按 [alt gr]+[3]+[任意键] 来输入一个。-- 匿名
维基笔记:此页面的名称 (SyntaxAddition) 并不十分描述性。也许 NegationSyntax? 会更好。