语法添加 |
|
"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使用单词而不是符号的规则(与and和or相比)。-- ReubenThomas
~是一个有效的数学符号,表示逻辑非 [1]。在编程语言中,它不那么常见。然而,即使在C等语言中,~也用于密切相关的按位求反,而!用于逻辑非,!=用于不等(即!(a==b))。所以,Lua的~=与之有微小的相似之处。然而,C在按位和逻辑运算之间是不一致的:&和&&,|和||,以及~和!--为什么不使用~~表示逻辑非以避免使用不同的字符呢?在Lua中,你也可以选择这样做not(a==b)。-- DavidManura
或者,也许可以像Basic那样使用<>...这样所有测试只需要三个比较字符<, >, =。~字符在Lua中目前是唯一的,因为它以多字符词法项开头,但本身不是一个多字符词法项!另外,<>与<=的使用相匹配,所以x<=y表示x<y 或 x=y,而x<>y表示x<y 或 x>y。一致。-- PeterHill
<>表示不等是一个坏主意。有些数据,<和>可能完全没有意义。例如,对于空间中的点,你可以定义相等和不等,但没有线性排序。然而,你仍然可能想要测试点的(不)相等性,而<>可能会产生误导。-- Hgr只有当你有完整的[2]排序时,它才是consistent的。否则,<、>和==都可能为false。尽管~在西班牙Windows键盘上输入起来很麻烦(我目前正用它写这条消息),但我已经习惯了--而且我肯定不希望不得不改变我手头的所有代码。总有一天我们都会有Unicode,能够使用&U+2260;,它在这个Wiki上无法渲染。-- RiciLake
使用!作为否定肯定会使从其他大多数语言转到Lua的人不那么烦恼。还有哪些语言使用~作为否定呢?这很奇怪,尤其是在其他语言中~用于否定以外的其他目的时。没有人说过要替换~作为否定,只是添加!作为一个替代。所以你现有的所有代码都将继续完美运行,并且完全不需要触动。--DanHollis?
就我所知:Smalltalk、Dylan和Matlab都使用~=表示某种不等,根据[Syntax Across Languages]页面。(它们也使用~作为逻辑非的前缀。)据我所知,用~前缀写逻辑非(在数学意义上)是相当常见的,所以使用~=表示不相等似乎是一个非常自然的扩展。--TaylorVenable
如上所述,支持两种符号会使一个本已简单的语言变得复杂。-- DavidManura
在某些键盘上,~很难找到和使用。例如,在azerty键盘上,你需要按[alt gr]+[3]+[任意键]来输入一个~。-- anonymous
Wiki注:此页面的名称(SyntaxAddition)不是很具描述性。也许NegationSyntax?会更好。