语法添加

lua-users home
wiki

通过对"llex.c"中的函数llex和数组luaX_tokens进行微小的更改,我们可以实现与C、JavaScript和其他语言相同的语法,用于“非”和“不等于”运算符。

在对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使用单词而不是符号的规则(与andor进行比较)。-- 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

IMO,使用<>表示不等式是一个糟糕的想法。对于某些数据,<>可能根本没有意义。例如,对于空间中的点,您可以定义相等和不等,但没有线性排序。但是,您可能仍然希望对点的(不)相等进行测试,而<>可能会产生误导。-- Hgr

只有在您有完整的[2]排序时,它才是一致的。否则,<>==这三个都可能为假。即使~在我的西班牙语Windows键盘上令人讨厌地难以输入(我目前正在使用它来编写此消息),我已经习惯了它——我当然不想更改所有我正在使用的代码。总有一天,我们都会使用Unicode,并且能够使用&U+2260;,它拒绝在此Wiki上渲染自己。-- RiciLake

使用!作为否定肯定会使大多数其他语言的程序员更容易学习Lua。还有哪些语言使用~作为否定?这很奇怪,特别是当~在其他语言中用于否定以外的其他事物时。没有人说要替换~作为否定,只是添加!作为替代。因此,您所有现有的代码都将继续完美运行,并且无需进行任何更改。--DanHollis?

值得一提的是:Smalltalk、Dylan 和 Matlab 都使用 `~=` 来表示某种不等式,根据 [跨语言语法] 页面。(它们也使用 `~` 作为逻辑非的前缀。)据我了解,用 `~` 前缀来表示逻辑否定(在数学意义上)相当普遍,因此使用 `~=` 来表示不等价似乎是一个非常自然的扩展。--TaylorVenable

支持这两种符号,如上所述,会使原本简单的语言变得复杂。-- DavidManura

在某些键盘上,`~` 很难找到和使用。例如,在 azerty 上,您需要按 [alt gr]+[3]+[任意键] 来输入一个。-- 匿名

维基笔记:此页面的名称 (SyntaxAddition) 并不十分描述性。也许 NegationSyntax? 会更好。


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2009 年 5 月 2 日凌晨 2:43 GMT (差异)