From b1b1dfa4c4543a87b81e47231b9e7aeb526ca3bd Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 12 Nov 2022 11:21:12 +0800 Subject: [PATCH] R MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @MuggleWei 感谢您,完成了第一篇翻译贡献! 顺便,请注意使用中文标点,以及在中英文间插入空格(可参考我的校对和本项目的排版风格指南。) --- .../20221103.0 ⭐️⭐️ Is Lua worth learning.md | 96 ++++++++++--------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/translated/tech/20221103.0 ⭐️⭐️ Is Lua worth learning.md b/translated/tech/20221103.0 ⭐️⭐️ Is Lua worth learning.md index 70c83a953f..848ebb0928 100644 --- a/translated/tech/20221103.0 ⭐️⭐️ Is Lua worth learning.md +++ b/translated/tech/20221103.0 ⭐️⭐️ Is Lua worth learning.md @@ -3,58 +3,60 @@ [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lkxed" [#]: translator: "MuggleWei" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " -Lua值得学习吗? +Lua 值得学习吗? ====== -Lua是一个有趣且强大的语言, 随着版本的推进, 功能愈发的强大, 开发者也在不断的增长. 这篇文章我们将探索一下它的可能性. +![](https://img.linux.net.cn/data/attachment/album/202211/12/111937y0kior1oyf44tttt.jpg) -Lua是一个脚本语言, 它面向过程, 函数式编程, 甚至可以是[面向对象的][1]. 它使用类c的语法, 但却是动态类型, 具有自动内存管理和垃圾回收功能, 使用基于寄存器的虚拟机来解释字节码. 这些特点使得它对于初学者来说是个很好的语言, 同时也是经验丰富的程序员的强大工具. +> Lua 是一个有趣而强大的语言,随着各个版本的推进,功能愈发的强大,开发者群体也在不断的增长。这篇文章我们将探索一下它的各种前景。 -虽然与[Python][2]和[JavaScript][3]相比, Lua现在已经有点儿黯然失色了, 但是Lua拥有的一些优点使得它在许多的重大软件项目中很受欢迎. Lua很容易嵌入到其他语言当中, 这意味着你可以在(例如)Java编写的代码中包含Lua文件, 就像原生的Java代码一样运行. 这听起来就像魔法一般, 现在有许多项目如[luaj][4]使得其成为可能, 之所以可以实现, 正是因为Lua就是为此而设计的. 正因这部分的灵活性, 你可以在许多游戏, 图形应用的程序中发现Lua脚本的身影. +Lua 是一个脚本语言,它面向过程、函数式编程,甚至可以是 [面向对象的][1]。它使用类 C 语言的语法,但却是动态类型,具有自动内存管理和垃圾回收功能,使用基于寄存器的虚拟机来解释字节码。这些特点使得它对于初学者来说是个很好的语言,同时也是经验丰富的程序员的强大工具。 -就像其他任何事情一样, 做到完美是需要时间的, Lua是很易于学习(并且有趣)的语言. 它是一种一致性的语言, 一种带有有用的错误消息的友好的语言, 并且可以在网上轻松找到许多有用的资料. 那么就让我们开始吧! +虽然与 [Python][2] 和 [JavaScript][3] 相比,Lua 现在已经有点儿黯然失色了,但是 Lua 拥有的一些优点使得它在许多的重大软件项目中很受欢迎。Lua 很容易嵌入到其他语言当中, 这意味着你可以在(例如)Java 编写的代码中包含 Lua 文件,就像原生的 Java 代码一样运行。这听起来就像魔法一般,现在有许多项目如 [luaj][4] 使得其成为可能,之所以可以实现,正是因为 Lua 就是为此而设计的。部分出于这种灵活性,你可以在许多游戏、图形应用的程序中发现 Lua 脚本的身影。 -### 安装Lua +就像其他任何事情一样,做到完美是需要时间的,但 Lua 是很易于学习(并且有趣)的语言。它是一种一致的语言、一种带有有用的错误消息的友好的语言,并且可以在网上轻松找到许多有用的资料。那么就让我们开始吧! -在Linux下, 你可以使用发行版自带的包管理来安装Lua. 例如, 在Fedora, CentOS, Mageia, OpenMandriva以及相似的发行版中: +### 安装 Lua + +在 Linux 下,你可以使用发行版自带的包管理来安装 Lua。例如,在 Fedora、CentOS、 Mageia、OpenMandriva 以及类似发行版中: ``` $ sudo dnf install lua ``` -在Debian以及基于Debian的系统中: +在 Debian 以及基于 Debian 的系统中: ``` $ sudo apt install lua ``` -对于Mac, 你可以使用[MacPorts][5] 或者 [Homebrew][6]. +对于 Mac,你可以使用 [MacPorts][5] 或者 [Homebrew][6]: ``` $ sudo port install lua ``` -对于Windows, 可以使用[Chocolatey][7]安装Lua. +对于 Windows,可以使用 [Chocolatey][7] 安装 Lua。 -完成安装后, 可以在终端中输入`lua`来在交互式解释器中使用Lua. +完成安装后,可以在终端中输入 `lua` 来在交互式解释器中使用 Lua。 ### 函数 -如许多编程语言一样, Lua调用一个内建的函数或关键字, 后面跟着参数. 例如, `print`函数显示你传给它的所有参数. +如许多编程语言一样,Lua 的语法通常是一个内建的函数或关键字,后面跟着参数。例如,`print` 函数显示你传给它的所有参数。 ``` $ lua -Lua 5.4.2 Copyright (C) 1994-2020 Lua.org, PUC-Rio +Lua 5.4.2 Copyright (C) 1994-2020 Lua.org,PUC-Rio > print('hello') hello ``` -Lua的`string`库可以操作单词(在编程中称为"字符串"). 例如, 统计字符串中的字母数量, 你可以使用`string`库中`len`函数: +Lua 的 `string` 库可以操作单词(在编程中称为“字符串”)。例如,要统计字符串中的字母数量,你可以使用 `string` 库中 `len` 函数: ``` > string.len('hello') @@ -63,7 +65,7 @@ Lua的`string`库可以操作单词(在编程中称为"字符串"). 例如, 统 ### 变量 -一个变量允许你在计算机内存中为临时的数据创建一个指定的空间. Lua中创建变量的方法是赋予变量一个名字, 接着将数据放入其中. +变量允许你在计算机内存中为临时的数据创建一个指定的空间。Lua 中创建变量的方法是赋予变量一个名字,接着将数据放入其中。 ``` > foo = "hello world" @@ -76,15 +78,15 @@ hello world ### 表 -在编程中, 数组的使用频率仅次于变量的存在. "数组"这个词的字面意思就是一种排列, 而这就是程序中数组的意义了. 它是数据的一种排列, 因为有排列, 所有数组具有结构化的优势. 本只上数组通常用于和变量相同的目的, 只不过数组会给对其中的数据进行排序. 在Lua中, 数组被称为`表`. +在编程中,数组的使用频率仅次于变量。“数组”这个词的字面意思就是一种排列,而这就是程序中数组的意义了。它是数据的一种排列,因为有排列,所有数组具有结构化的优势。本质上,数组通常用于和变量相同的目的,只不过数组会给对其中的数据进行排序。在 Lua 中,数组被称为“表”。(LCTT 译注:使用过其它编程语言的同学可以发现,Lua 的表相当于其它语言中的关联数组、哈希。) -创建表和创建变量类似, 区别仅在于它的初始化内容被设置为`{}`: +创建表和创建变量类似,区别仅在于它的初始化内容被设置为 `{}`: ``` > mytable = {} ``` -当往表中增加数据时, 它就如同创建变量一样, 区别在于这里的变量之前总是以表名开头, 中间使用`.`来连接: +当往表中增加数据时,它就如同创建变量一样,区别在于这里的变量之前总是以表名开头,中间使用 `.` 来连接: ``` > mytable.foo = "hello world" @@ -95,22 +97,22 @@ hello world 3 ``` -### 使用Lua作为脚本 +### 使用 Lua 编写脚本 -在终端交互环境中运行Lua可以得到良好的反馈, 但是将Lua作为脚本运行会更为有用. 一个Lua脚本就是包含Lua代码的文本文件, Lua命令可以解析并执行此文件. +在终端交互环境中运行 Lua 可以得到良好的反馈,但是将 Lua 作为脚本运行会更为有用。Lua 脚本就是包含 Lua 代码的文本文件,Lua 命令可以解析并执行此文件。 -对于开始学习一门编程语言, 永恒的问题是你怎么知道该写什么. 这篇文章将提供一个不错的开端, 截至目前, 你仅知道了两三个Lua函数. 懂得查阅文档是很关键的. Lua并不是一个复杂的语言, 可以通过[Lua文档网站][8]很方便的获取关键字以及函数的用法. +在刚刚开始学习一门编程语言时,一个永恒的问题是你怎么知道该写什么。这篇文章将提供一个不错的开端,截至目前,你仅知道了两三个 Lua 函数。懂得查阅文档是很关键的。Lua 并不是一个复杂的语言,可以通过 [Lua 文档网站][8] 很方便的获取关键字以及函数的用法。 -下面是一个练习题. +下面是一个练习题。 -假设你想编写一个Lua脚本来统计句子中的单词数量. 与众多的编程挑战一样, 有许多方法可以解决这个问题, 假设你在Lua文档中找到的第一个相关的函数是`string.gmatch`, 此函数可以搜索字符串中的特定字符. 单词通常通过空格分隔开来, 所以你决定计算空格数并加1来作为单词的数量. +假设你想编写一个 Lua 脚本来统计句子中的单词数量。与众多的编程挑战一样,有许多方法可以解决这个问题,假设你在 Lua 文档中找到的第一个相关的函数是 `string.gmatch`,此函数可以搜索字符串中的特定字符。单词通常通过空格分隔开来,所以你决定计算空格数并加 1 来作为单词的数量。 -下面是实现的代码 +下面是实现的代码: ``` function wc(words,delimiter) count=1 - for w in string.gmatch(words, delimiter) do + for w in string.gmatch(words,delimiter) do count = count + 1 end @@ -118,41 +120,41 @@ function wc(words,delimiter) end ``` -下面是这个样例代码的解释 +下面是这个样例代码的解释: -- `function`: 这是声明函数开始的关键字. 自定义函数的工作方式与内置函数(如`print`和`string.len`)基本相同 -- `words`和`delimiter`: 这是函数运行所需的参数. 正如`print('hello')`当中, `hello`是一个参数 -- `counter`: 一个变量, 且被初始化为1 -- `for`: 在循环中使用`string.gmatch`作为迭代器遍历`words`, 并且在其中搜索`delimiter` -- `count = count +1`: 当搜索到了`delimiter`, 则对`count`进行自增1的操作 -- `end`: `for`循环的结束关键字 -- `return count`: 这个函数输出(或返回)`count`变量的内容 -- `end`: 函数结束的关键字 +- `function`:这是声明函数开始的关键字。自定义函数的工作方式与内置函数(如 `print` 和 `string.len`)基本相同。 +- `words` 和 `delimiter`:这是函数运行所需的参数。正如 `print('hello')` 当中,`hello` 是一个参数。 +- `counter`:一个变量,且被初始化为 `1`。 +- `for`:在循环中使用 `string.gmatch` 作为迭代器遍历 `words`,并且在其中搜索`delimiter`。 +- `count = count + 1`:当搜索到了 `delimiter`,则对 `count` 进行自增 1 的操作。 +- `end`:`for` 循环的结束关键字。 +- `return count`:这个函数输出(或返回)`count` 变量的内容。 +- `end`:函数结束的关键字。 -现在你已经创建了一个函数, 你可以使用它. 需要记住, 函数不会自动运行, 而是等待你在代码中调用它. +现在你已经创建了一个函数,你可以使用它。需要记住,函数不会自动运行,而是等待你在代码中调用它。 -将下面的代码写入文件并保存为`words.lua` +将下面的代码写入文件并保存为 `words.lua`: ``` function wc(words,delimiter) count=1 - for w in string.gmatch(words, delimiter) do + for w in string.gmatch(words,delimiter) do count = count + 1 end return count end -result = wc('zombie apocalypse', ' ') +result = wc('zombie apocalypse',' ') print(result) -result = wc('ice cream sandwich', ' ') +result = wc('ice cream sandwich',' ') print(result) -result = wc('can you find the bug? ', ' ') +result = wc('can you find the bug? ',' ') print(result) ``` -你现在创建了一个Lua脚本. 你可以使用Lua运行它. 随后你会发现统计单词的结果有些问题 +你现在创建了一个 Lua 脚本。你可以使用 Lua 运行它。随后你会发现统计单词的结果有些问题: ``` $ lua ./words.lua @@ -161,11 +163,13 @@ $ lua ./words.lua 6 ``` -你也许已经注意到了最后一个句子的单词统计不正确, 因为在句子的最后带有一个额外的空格. Lua正确的检测到了空格, 并将其计入`count`中, 但是单子的统计是错误的, 因为有个空格并没有作为单词的分隔出现. 我把这个问题留给你来解决, 或者去发现其他方法, 即使这个方法不太理想. 编程中有很多需要思考的地方. 有时是纯粹学术性的思考, 有时也许是应用是否运训正常的思考. +你也许已经注意到了最后一个句子的单词统计不正确,因为在句子的最后带有一个额外的空格。Lua正确的检测到了空格,并将其计入 `count` 中,但是单子的统计是错误的,因为有个空格并没有作为单词的分隔出现。我把这个问题留给你来解决,或者去发现其他方法,即使方法不太理想。编程中有很多需要思考的地方。有时是纯粹学术性的思考,有时也许是应用是否运训正常的思考。 -### 学习Lua +### 学习 Lua -Lua是一个有趣且强大的语言, 随着版本的推进, 功能愈发的强大, 开发者也在不断的增长. 你可以将Lua作为实用性的个人脚本使用, 或者在工作中使用, 或者仅仅是体验一下一个新的语言. 尝试一下, 看看Lua能给你带来什么吧. +Lua 是一个有趣且强大的语言,随着版本的推进,功能愈发的强大,开发者群体也在不断的增长。你可以将 Lua 作为实用性的个人脚本使用,或者在工作中使用,或者仅仅是体验一下一个新的语言。尝试一下,看看 Lua 能给你带来什么吧。 + +(LCTT 译注:顺便问一句,你知道 “Lua” 怎么发音吗? 🤣) -------------------------------------------------------------------------------- @@ -174,7 +178,7 @@ via: https://opensource.com/article/22/11/lua-worth-learning 作者:[Seth Kenlon][a] 选题:[lkxed][b] 译者:[MuggleWei](https://github.com/MuggleWei) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出