如何在lua中使用变量进行操作?

如何使得这两个"print"输出true?

代码:

Config = {}
Config.option1.general = true
Config.option2.general = false

print(Config.option1.general)
print('Config.'..'option1'..'.general')

输出:

true
Config.option1.general

请原谅我的无知。

点赞
用户12568711
用户12568711

第一个 print 函数是收集一个变量,并显示该变量的值。

第二个 print 函数已经收集了一个字符串。字符串是一组字符,它们只表示文本,因此将显示该文本。

例如,假设我们有一个变量 test = true

如果您输入 print(test),则将显示变量的值,即 true。现在,如果您输入 print("test"),则 "" 表示我们正在谈论一个文本 "test",而不是变量 test,因此将显示 test 而不是 true

请注意,在第二个 print 中,使用了两个点号 ..,这称为连接,它是将两个或更多字符串连接在一起,即将两个或更多文本合并为一个。

因此,在第二个 print 中,您无法打印 true,因为您正在收集一个名为变量的字符串,而不是变量本身。

2020-08-18 19:29:41
用户6879826
用户6879826

任务是创建一个函数,该函数接受一个选项字符串作为输入,并使用该字符串作为Config表中的键来执行代码:

function getOption(opt)
  return Config[opt].general
end

然后您可以按需使用返回的值:

> getOption('option1'true
> print(getOption('option1'))
true
> if (getOption('option1'))then print'mmy!' else print'Aw...' end
噫!

如果您想要冒险,请使用load从字符串运行代码块。然而,在用户输入中使用此功能会带来安全问题。

只需编写一个接受指定选项的字符串的函数,并使用该输入来设计表示块的字符串。load函数返回一个函数,其主体是块,因此您需要调用返回的函数以从块中获取结果:

function getOption(opt)
  local cmd = 'Config.' .. opt .. '.general'
  return load('return ' .. cmd)()
end

使用getOption('option1')cmd字符串成为'Config.option1.general',并将其与'return '连接起来以创建块'return Config.option1.general',该块被传递给load。语句load('return Config.option1.general')()调用由load返回的函数,并再次从getOption函数返回返回的值。

示例交互:

> getOption('option1'true
> getOption('option2'false
2020-08-18 21:21:45