語法新增

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 使用單字而非符號的規則(請比較「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] 順序時,它才具有一致性。否則 <>== 這三個都可能為 false。儘管 ~ 在我目前用來撰寫此訊息的西班牙 Windows 鍵盤上,輸入時討厭地困難,但我已經習慣了它 -- 而且我絕對不想要變更所有我已經四處使用的程式碼。總有一天我們都會擁有 Unicode,並可以使用 &U+2260;,而這個 Wiki 無法呈現這個字元。 -- RiciLake

使用 ! 作為否定,這對其他語言的程式設計員來說,一定會讓他們覺得 Lua 少了一點討厭。還有哪些語言把 ~ 當作否定?這很好奇,尤其是當其他語言會把 ~ 拿來做否定時。沒有人說要替換 ~ 作為否定,只需要加 ! 當作備註。因此,你既有的程式碼能繼續完美運作,而不需要任何更動。--DanHollis?

對於這一點而言:根據 [跨語言語法] 頁面,Smalltalk、Dylan 和 Matlab 全部都把 ~= 用於某種不等式。(它們也會把 ~ 當作邏輯非的開頭)。就我的理解,用 ~ 開頭來寫邏輯否定(數學意義上),相當常見,因此把 ~= 用來表示不相等,看起來就像是很自然的延伸。--TaylorVenable

如上面建議的一樣,同時支援兩個符號,只會讓原本簡單的語言變得複雜。-- DavidManura

在某些鍵盤上,~ 很難找也很難用。例如,在 azerty 上,你必須按 [alt gr]+[3]+[任何按鍵],才能打出一個。-- 匿名

Wiki 備註:這個頁面的名稱 (SyntaxAddition) 不具有太好的說明性。或許 NegationSyntax? 會比較好。


最近變更 · 偏好設定
編輯 · 歷史紀錄
最後編輯時間:格林威治時間 2009 年 5 月 2 日,凌晨 2:43 ((差異))