29

我想知道在 Lua 中是否有使用分号的一般约定,如果有,我应该在哪里/为什么使用它们?我来自编程背景,所以用分号结束语句在直觉上似乎是正确的。"optional"但是,当人们普遍接受分号结束其他编程语言中的语句时,我担心为什么会这样。也许有一些好处?

例如:从lua 编程指南中,这些都是可以接受的、等效的并且在语法上是准确的:

a = 1
b = a*2

a = 1;
b = a*2;

a = 1 ; b = a*2

a = 1   b = a*2    -- ugly, but valid

作者还提到:Usually, I use semicolons only to separate two or more statements written in the same line, but this is just a convention.

这是否被 Lua 社区普遍接受,还是有其他大多数人喜欢的方式?还是像我个人喜好一样简单?

4

5 回答 5

35

Lua 中的分号一般只在一行写多个语句时才需要。

例如:

local a,b=1,2; print(a+b)

或者写成:

local a,b=1,2
print(a+b)

在我的脑海中,我不记得在 Lua 中我不得不使用分号的任何其他时间。

编辑:查看 lua 5.2 参考我看到另一个常见的地方,你需要使用分号来避免歧义 - 你有一个简单的语句,后跟一个函数调用或括号来分组一个复合语句。这是位于此处的手动示例:

--[[ Function calls and assignments can start with an open parenthesis. This 
possibility leads to an ambiguity in the Lua grammar. Consider the 
following fragment: ]]

a = b + c
(print or io.write)('done')

-- The grammar could see it in two ways:

a = b + c(print or io.write)('done')

a = b + c; (print or io.write)('done')
于 2013-05-31T17:51:00.950 回答
0

在局部变量和函数定义中。在这里,我比较了两个非常相似的示例代码来说明我的观点。

local f;  f = function() function-body end

local f = function() function-body end

当函数体部分包含对变量“f”的引用时,这两个函数可以返回不同的结果。

于 2019-12-23T15:43:23.743 回答
0

许多不需要分号的编程语言(包括 Lua)都有不使用分号的约定,除了在同一行分隔多个语句

Javascript 是一个重要的例外,它通常按照约定使用分号。

Kotlin 在技术上也是一个例外。Kotlin 文档说不仅不要在非批处理语句上使用分号,而且还要

尽可能省略分号。

于 2020-01-10T02:42:57.800 回答
-1

在局部变量定义中,我们时不时会得到模棱两可的结果:

local a, b = string.find("hello world", "hello") --> a = nil, b = nil

而有时 a 和 b 被分配了正确的值 7 和 11。

所以我别无选择,只能遵循以下两种方法之一:

  1. local a, b; a, b = string.find("hello world", "hello") --> a, b = 7, 11
  2. local a, b a, b = string.find("hello world", "hello") --> a, b = 7, 11
于 2019-12-23T15:10:19.873 回答
-1

对于一条线上不止一件东西,例如:

c=5
a=1+c
print(a) -- 6

可以缩短为:

c=5; a=1+c; print(a) -- 6

还值得注意的是,如果您习惯于 Javascript 或类似的东西,您必须以分号结束一行,并且您特别习惯于编写它,那么这意味着您不必删除它分号,相信我,我也习惯了 Javascript,我真的,真的忘记了你不需要分号,每次我写一个新行!

于 2019-01-28T01:48:45.403 回答