Redian新闻
>
Lua 值得学习吗? | Linux 中国

Lua 值得学习吗? | Linux 中国

科技
 
导读:Lua 是一个有趣而强大的语言,随着各个版本的推进,功能愈发的强大,开发者群体也在不断的增长。这篇文章我们将探索一下它的各种前景。
本文字数:3866,阅读时长大约:5分钟

Lua 是一个有趣而强大的语言,随着各个版本的推进,功能愈发的强大,开发者群体也在不断的增长。这篇文章我们将探索一下它的各种前景。

Lua 是一个脚本语言,它面向过程、函数式编程,甚至可以是 面向对象的🔗 opensource.com。它使用类 C 语言的语法,但却是动态类型,具有自动内存管理和垃圾回收功能,使用基于寄存器的虚拟机来解释字节码。这些特点使得它对于初学者来说是个很好的语言,同时也是经验丰富的程序员的强大工具。

虽然与 Python🔗 opensource.com 和 JavaScript🔗 opensource.com 相比,Lua 现在已经有点儿黯然失色了,但是 Lua 拥有的一些优点使得它在许多的重大软件项目中很受欢迎。Lua 很容易嵌入到其他语言当中, 这意味着你可以在(例如)Java 编写的代码中包含 Lua 文件,就像原生的 Java 代码一样运行。这听起来就像魔法一般,现在有许多项目如 luaj🔗 github.com 使得其成为可能,之所以可以实现,正是因为 Lua 就是为此而设计的。部分出于这种灵活性,你可以在许多游戏、图形应用的程序中发现 Lua 脚本的身影。

就像其他任何事情一样,做到完美是需要时间的,但 Lua 是很易于学习(并且有趣)的语言。它是一种一致的语言、一种带有有用的错误消息的友好的语言,并且可以在网上轻松找到许多有用的资料。那么就让我们开始吧!

安装 Lua

在 Linux 下,你可以使用发行版自带的包管理来安装 Lua。例如,在 Fedora、CentOS、 Mageia、OpenMandriva 以及类似发行版中:

  1. $ sudo dnf install lua

在 Debian 以及基于 Debian 的系统中:

  1. $ sudo apt install lua

对于 Mac,你可以使用 MacPorts🔗 opensource.com 或者 Homebrew🔗 opensource.com

  1. $ sudo port install lua

对于 Windows,可以使用 Chocolatey🔗 opensource.com 安装 Lua。

完成安装后,可以在终端中输入 lua 来在交互式解释器中使用 Lua。

函数

如许多编程语言一样,Lua 的语法通常是一个内建的函数或关键字,后面跟着参数。例如,print 函数显示你传给它的所有参数。

  1. $ lua
  2. Lua 5.4.2 Copyright (C) 1994-2020 Lua.orgPUC-Rio
  3. > print('hello')
  4. hello

Lua 的 string 库可以操作单词(在编程中称为“字符串”)。例如,要统计字符串中的字母数量,你可以使用 string 库中 len 函数:

  1. > string.len('hello')
  2. 5

变量

变量允许你在计算机内存中为临时的数据创建一个指定的空间。Lua 中创建变量的方法是赋予变量一个名字,接着将数据放入其中。

  1. > foo = "hello world"
  2. > print(foo)
  3. hello world
  4. > bar = 1+2
  5. > print(bar)
  6. 3

在编程中,数组的使用频率仅次于变量。“数组”这个词的字面意思就是一种排列,而这就是程序中数组的意义了。它是数据的一种排列,因为有排列,所有数组具有结构化的优势。本质上,数组通常用于和变量相同的目的,只不过数组会给对其中的数据进行排序。在 Lua 中,数组被称为“表”。(LCTT 译注:使用过其它编程语言的同学可以发现,Lua 的表相当于其它语言中的关联数组、哈希。)

创建表和创建变量类似,区别仅在于它的初始化内容被设置为 {}:

  1. > mytable = {}

当往表中增加数据时,它就如同创建变量一样,区别在于这里的变量之前总是以表名开头,中间使用 . 来连接:

  1. > mytable.foo = "hello world"
  2. > mytable.bar = 1+2
  3. > print(mytable.foo)
  4. hello world
  5. > print(mytable.bar)
  6. 3

使用 Lua 编写脚本

在终端交互环境中运行 Lua 可以得到良好的反馈,但是将 Lua 作为脚本运行会更为有用。Lua 脚本就是包含 Lua 代码的文本文件,Lua 命令可以解析并执行此文件。

在刚刚开始学习一门编程语言时,一个永恒的问题是你怎么知道该写什么。这篇文章将提供一个不错的开端,截至目前,你仅知道了两三个 Lua 函数。懂得查阅文档是很关键的。Lua 并不是一个复杂的语言,可以通过 Lua 文档网站🔗 www.lua.org 很方便的获取关键字以及函数的用法。

下面是一个练习题。

假设你想编写一个 Lua 脚本来统计句子中的单词数量。与众多的编程挑战一样,有许多方法可以解决这个问题,假设你在 Lua 文档中找到的第一个相关的函数是 string.gmatch,此函数可以搜索字符串中的特定字符。单词通常通过空格分隔开来,所以你决定计算空格数并加 1 来作为单词的数量。

下面是实现的代码:

  1. function wc(words,delimiter)
  2. count=1
  3. for w in string.gmatch(wordsdelimiter) do
  4. count = count + 1
  5. end
  6. return count
  7. end

下面是这个样例代码的解释:

◈ function:这是声明函数开始的关键字。自定义函数的工作方式与内置函数(如 print 和 string.len)基本相同。
◈ words 和 delimiter:这是函数运行所需的参数。正如 print('hello') 当中,hello 是一个参数。
◈ counter:一个变量,且被初始化为 1
◈ for:在循环中使用 string.gmatch 作为迭代器遍历 words,并且在其中搜索delimiter
◈ count = count + 1:当搜索到了 delimiter,则对 count 进行自增 1 的操作。
◈ endfor 循环的结束关键字。
◈ return count:这个函数输出(或返回)count 变量的内容。
◈ end:函数结束的关键字。

现在你已经创建了一个函数,你可以使用它。需要记住,函数不会自动运行,而是等待你在代码中调用它。

将下面的代码写入文件并保存为 words.lua

  1. function wc(words,delimiter)
  2. count=1
  3. for w in string.gmatch(wordsdelimiter) do
  4. count = count + 1
  5. end
  6. return count
  7. end
  8. result = wc('zombie apocalypse'' ')
  9. print(result)
  10. result = wc('ice cream sandwich'' ')
  11. print(result)
  12. result = wc('can you find the bug? '' ')
  13. print(result)

你现在创建了一个 Lua 脚本。你可以使用 Lua 运行它。随后你会发现统计单词的结果有些问题:

  1. $ lua ./words.lua
  2. 2
  3. 3
  4. 6

你也许已经注意到了最后一个句子的单词统计不正确,因为在句子的最后带有一个额外的空格。Lua正确的检测到了空格,并将其计入 count 中,但是单子的统计是错误的,因为有个空格并没有作为单词的分隔出现。我把这个问题留给你来解决,或者去发现其他方法,即使方法不太理想。编程中有很多需要思考的地方。有时是纯粹学术性的思考,有时也许是应用是否运训正常的思考。

学习 Lua

Lua 是一个有趣且强大的语言,随着版本的推进,功能愈发的强大,开发者群体也在不断的增长。你可以将 Lua 作为实用性的个人脚本使用,或者在工作中使用,或者仅仅是体验一下一个新的语言。尝试一下,看看 Lua 能给你带来什么吧。

(LCTT 译注:顺便问一句,你知道 “Lua” 怎么发音吗?🤣)


via: https://opensource.com/article/22/11/lua-worth-learning

作者:Seth Kenlon 选题:lkxed 译者:MuggleWei 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :MuggleWei
🌟
翻译: 1.0 篇
|
贡献: 1 天
2022-11-10
2022-11-10
https://linux.cn/lctt/MuggleWei
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何在 Ubuntu Linux 上更新谷歌 Chrome | Linux 中国解决 Linux 中的 “Bash: Command Not Found” 报错 | Linux 中国如何在 Linux 中使用媒体传输协议访问安卓设备的内部存储和 SD 卡 | Linux 中国一个适用于苹果芯片的原生 Linux GPU 驱动程序几乎就绪! | Linux 中国打造万圣节 Linux 桌面 | Linux 中国你真的会深度学习吗?准备好在 Debian Linux 上获得 Ubuntu MATE 的体验吧! | Linux 中国操作系统人机对话!Linux OS大谈Windows与macOS:值得学习,但被Linux碾压如何在最小安装的 CentOS、RHEL、Rocky Linux 中设置互联网 | Linux 中国开源朗读者:使用 Linux 的优势和劣势 | Linux 中国Rosalía 登意大利版《VOGUE》封面!使用 Podman Desktop 在 Fedora Linux 上管理容器 | Linux 中国在 Linux 中创建 LVM 分区的分步指南 | Linux 中国虐心的儿子和父亲他为何在仪仗队屡次工伤?Arch Linux 中用于包管理的图形化应用 | Linux 中国bāo huā shēng?bō huā shēng?哇!Torvalds 为自己的 Apple M2 Macbook 专门修改了 Fedora Linux | Linux 中国如何在 Silverblue 上变基到 Fedora Linux 37 | Linux 中国Rhino Linux:滚动发布但也很稳定的 Ubuntu | Linux 中国在你的 Linux 终端中玩经典的贪吃蛇游戏 | Linux 中国看电视连续剧《新闺蜜时代》Tuxedo 已对所有用户开放基于 Ubuntu 的 TUXEDO OS | Linux 中国比萨斜塔+伽利略LURE 初窥!将 AUR 带入所有 Linux 发行版 | Linux 中国Linux inxi 命令的 3 种使用方法 | Linux 中国在 Linux 中如何从命令行查找默认网关的 IP 地址 | Linux 中国居然敢动赵家人。。。收藏!China Daily这30篇写中国文化的文章,值得学习!Atoms 是一个可以让你轻松管理 Linux Chroot 环境的 GUI 工具 | Linux 中国传统的 Linux 软件包格式不适合现代应用 | Linux 中国我如何使用现场 USB 设备恢复我的 Linux 系统 | Linux 中国关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事 | Linux 中国System 76 将不会发布 Pop!_OS 22.10 Linux 发行版 | Linux 中国如何在 Arch Linux 中启用 Snap 支持 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。