lua - 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
表。 - 如果它们是基本拉丁文、数字和下划线的字符串,您可以跳过
[""]
/在表键中: not 。['']
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' )
PS你甚至可以使表匿名,尽管它需要用括号括起来,否则 Lua 会认为这return
不是之前的最后一个运算符,end
因为它应该是:
local function make_sound( input )
return ({
cat = 'meow',
dog = 'woof',
cow = 'moo'
})[input]
end
print( make_sound 'cat' )
推荐阅读
- compiler-errors - 在模块中找不到 (1) 中引用的非法预处理器指令和符号
- docker - 创建预填充的 docker 映像
- cjson - cJSON 建立一个数组?
- php - How to insert all textview and edittext fields into same columns in database mysql in Android Studio
- html - VBA对网站检查元素的HTML解析
- ios - 后台快速计时器
- java - 如何跨 java 桌面和 android 应用程序连接两个 sqlite 数据库?
- java - 如何在spring boot中找到hibernate orm或hibernate ogm用于连接我的mongodb服务器
- angular - 如何查看除特定控件之外的所有 FormControls ValueChanges?
- html - 选中网页上的复选框