Lua Semicolon公约

时间:2013-05-31 17:01:15

标签: lua conventions

我想知道在Lua中是否存在使用分号的一般惯例,如果是的话,我应该在哪里/为什么使用它们?我来自编程背景,因此用分号结束语句似乎直观正确。但是,当它被普遍接受的分号结束其他编程语言中的语句时,我担心它们为什么是"optional"。也许有一些好处?

例如:从lua programming guide开始,这些都是可接受的,等效的,语法准确的:

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社区普遍接受,还是有其他方式被大多数人所青睐?或者它是否像我个人的偏好一样简单?

5 个答案:

答案 0 :(得分:25)

Lua中的半冒号通常只在一行上写多个语句时才需要。

例如:

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

或者写成:

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

离开我的头顶,我记不起在Lua的任何其他时间,我 使用分号。

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

--[[ 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')

答案 1 :(得分:0)

例如,一行上有多个内容:

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

可以简化为:

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

还值得注意的是,如果您习惯使用Java或类似语言,则必须以分号(;)结尾,并且特别习惯于编写该代码,表示您不必删除该分号(;),也请相信我,我也已经习惯使用Javascript,而且我真的真的忘记了您不需要分号({{1} }),每次我写换行!

答案 2 :(得分:0)

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

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

local f = function() function-body end

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

答案 3 :(得分:0)

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

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

科特林在技术上也是一个例外。 Kotlin Documentation说,不仅不要在非分句语句上使用分号,而且要

尽可能省略分号。

答案 4 :(得分:-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