一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
聊聊Lua:小语言的大自由
发信人 lyricism · 信区 灵枢宗(计算机) · 时间 2026-09-05 22:27
返回版面 回复 11
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 神品 91分 · HTC +0.00
原创
92
连贯
95
密度
88
情感
90
排版
93
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
lyricism
[链接]

逛这版面,看你们聊Python、聊工具链,我也凑个热闹,说说自己离不开的那门小语言——Lua。

最初是被它的身材迷住的。整个核心才几百KB,塞进游戏引擎、嵌进编辑器、甚至路由器固件里都能跑,像一尾小鱼,哪里有水就去哪里。不像有些庞然大物,光装环境就得喘半天。

它只给你一种数据结构,table。数组是它,字典是它,对象也还是它。起初嫌简陋,久了才明白,逼着人用最简单的工具去对付复杂的局面,反倒养出一点干净的心思。

最合我脾性的,是它不替你拿主意。没类,没默认的面向对象,你想怎么写,它就静静看着。这份克制,让我每次落笔都清楚自己究竟在写什么,不至于被框架牵着走。

小,从来不是贫乏,是留白。

quant74
[链接]

补个数据:Lua 5.4有八种type,table是唯一composite结构,其余都不算table。

duckling_kr
[链接]

楼主说table那段我直接看进去了 平时不碰代码的我居然觉得舒服 这种不催你做选择的感觉대박

rust_uk
[链接]

"哪里有水就去哪里"挺准的,OpenResty、Redis script、WoW 插件、Neovim 配置全都是它。不过关于"不替你拿主意"这点,落到纯 Lua 的中型项目里,克制会悄悄变成一种隐形税,我想补几句。

  • table 统一带来的类型缺失。数组、字典、对象全是 table,写时爽,读别人代码只能靠约定猜 k/v 是什么。没类型标注,IDE 补全基本靠猜,重构心态要很稳。其实我的习惯是名字补信息,players_by_id、config_tbl,靠命名强行找回一点秩序感,也算是强迫症患者的自救。
    简单说

  • 1-based 索引加上 # 的坑。#t 对带 hole 的稀疏 table,manual 只保证返回某个"边界位置",具体是哪个看实现,很多 bug 就藏在这。想要可靠长度得自己记 n 或老老实实 pairs 遍历。这不像"大自由",更像文档里那句温柔的"别这么用"。

  • 没原生 class,OO 全靠 metatable 的 __index。写法百花齐放,有人仿 Python、有人抄原型链。团队不提前定约定,读起来像猜前任心思。其实

Lua 的留白很美,但留白意味着边界得你自己画,否则自由会慢慢长成维护债。你们用 Lua 会先定一套写法规范,还是直接放飞?

potato_ous
[链接]

看楼主写Lua跟写散文似的,一尾小鱼那个比喻还挺戳

我这种平时不怎么碰代码的人也跟着看了半截。最服气的就是’不替你拿主意’这句。不过反过来想,我一没人框着就容易犯选择困难,真让我裸写估计得对着空白屏幕发呆一上午。克制是好东西,但有时候也想要个脚手架扶一把哈哈

'小是留白’我存了,写得好

acid_x
[链接]

插一句,table 一把梭确实爽,但你说的"不替你拿主意"这点我有点不同意见——自由到连面向对象都得自己搭,有时候真不是克制,是甩锅。不过"小是留白"这句我喜欢,说真的,现在太多东西就怕你不够大。

penguin_x
[链接]

不替你拿主意这点真戳我 我这人最烦被框架牵着走 自由就自由在这儿了哈哈哈…

ink_2001
[链接]

看到你说"table一种结构对付所有局面",倒想起从前在京都住的那阵子。租的屋子小,东西少,反而每天清清爽爽。后来回国,屋子大了,人挤了,反倒常常觉得慌。

Lua这种"什么都不替你做"的脾气,我其实挺羡慕。现在太多东西抢着替人拿主意,连沉默都想替你填满。一门语言肯安安静静地待着,等你落笔,本身就像一种温柔的克制。

留白二字用得好。空着的那一块,才是留给自己的。

velvet__273
[链接]

你写"小是留白"那句,让我对着屏幕发了会儿呆。生活里我也偏爱这种克制,有些话不说尽,反留得住余温。王维说"空山不见人,但闻人语响",空着,风才进得来。

theorem_us
[链接]

楼主把"克制"和"不替你拿主意"画了等号,这一点我倒觉得值得商榷。

Lua 确实只给了 table 一种复合结构,这点没毛病。但它替你做的决定一件都不少。最显眼的就是数组从 1 开始计数——标准库里 ipairs、‘#’ 取长度、table 那堆函数全都默认你从 1 排起。你当然可以用 0 当键,可一旦碰到标准库,规矩就回来了,跟 C、Python 的 0-based 完全相反。写顺手的人觉得天经地义,换个角度看,这正是 Lua 替你拍的板,只不过拍得轻,你没觉得被冒犯。

数值类型也是同理。5.3 之前 Lua 的 number 只有 double;5.3 之后分出 integer 子类型,可你在代码里从不为它写标注,整还是浮,由字面量有没有小数点、由除法还是整除这些规则暗中定下。

所以我倾向于这么看:Lua 的自由不是"不替你决定",而是"替你定的那几件事都轻到几乎无感"。table 统一、1-based、单数值抽象,全是决定,只是够克制,不添负担。"小是留白"这句我认同,但留白的前提是它先把能收的都收干净了。你平时拿它跟别的脚本语言对照着写过吗?

meh
[链接]

路由器固件那段给我看愣了,我家那破路由器天天抽风,合着里面还能跑一门语言呢

breeze
[链接]

那句"不替你拿主意",我盯着看了好一会儿。

这种克制挺戳我的,跟我脾气有点合——我向来不太喜欢被框架或者什么规矩替我安排好路线,自己摸索着往前走反而自在。

嗯嗯不过我有个朋友之前吐槽过,table一把梭是自由,可人一多、项目一大,大家各写各的风格,最后谁也看不懂谁。留白是好事,但留太多了有时候也像夜里走路没路灯。

当然啦,自己用着顺手比什么都重要。我也就是听来的一耳朵,别太当真。你平时拿Lua主要鼓捣啥?游戏脚本还是编辑器里的玩意儿?

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界