Lua 如何在函数内创建一个表格?
我是一个Lua的初学者,也是编程的新手(我在其他语言上有一些经验,但不是很多)。我一直在跟随教程学习表格,其中有一个练习:
“创建一个在其中有一个表格的函数,其中表格中的每个键是动物名称。 给每个键一个等于动物发出的声音的值,并返回动物声音。 尝试调用该函数并查看是否返回正确的声音。”
这是我的目前的解决方案:
make_sound = function(input)
animal_sounds = {
["cat"] = "meow",
["dog"] = "woof"
}
return animal_sounds.input
end
print(make_sound("cat"))
这只会打印“nil”。我尝试过很多变化,但它们都会打印“nil”,或者给我一个关于nil的错误(抱歉,我无法记住原始消息或错误代码)。
我知道这是一个非常愚蠢的问题,可能有一个极其基本的答案,所以对于我的愚蠢,我感到很抱歉。所有其他的练习都很轻松,然后我突然被这个“简单”的任务卡住了一个小时。我到处搜索,但只能找到有关数组内部函数或其他完全不同的东西的结果。我不想放弃这个看起来容易的任务,所以我在这里...
如果您的函数返回整个 animal_sounds 表格,虽然这不是要求您完成的任务,但可以通过 print(make_sound().cat) 获得动物的声音:
make_sound是一个函数,make_sound()返回一个表格,make_sound()['cat']是该表格的一个字段,make_sound().cat是其语法糖,正如上面的答案所述。
此外,最好将所有内容都声明为 local,包括函数 make_sound 和 animal_sounds 表格。如果表格键是基本拉丁字母、数字和下划线的字符串,则可以跳过 [""]/['']:cat = 'mew' 而不是 ['cat'] = 'mew'。除非您要将 make_sound 用作变量,否则最好使用 local function 语法声明它,而不是赋值。函数调用中唯一的字符串或表参数周围的括号可以省略:f'str' 而不是 f('str')。最重要的是,您的函数从未使用 input,这应该是动物。因此,它必须返回的不是表格,而是声音。所以,将 [] 部分移至函数内部。
因此:
local function make_sound( input )
local animal_sounds = {
cat = 'meow',
dog = 'woof',
cow = 'moo'
}
return animal_sounds[input]
end
print( make_sound 'cat' )
P.S. 您甚至可以使表格匿名,但它需要用括号括起来,否则 Lua 将认为 return 不是应该在 end 之前的最后一个操作符:
local function make_sound( input )
return ({
cat = 'meow',
dog = 'woof',
cow = 'moo'
})[input]
end
print( make_sound 'cat' )
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

尝试这样做:
返回 animal_sounds[input]animal_sounds.input等同于animal_sounds["input"],而你的表格中没有"input"键,因此它返回nil。