将参数传递给函数时,用大括号替换括号是什么?

问题描述 投票:0回答:1
local function bruh(a,b)
return a.hai, a.yey
end
print(bruh(
{hai = "hoho"},
{yey = 11}
)) --> hoho nil

我试图更改代码一点

local function bruh(a,b)
return a.hai, a.yey
end
print(bruh{
{hai = "hoho"},
{yey = 11}
})--> nil nil

我的代码有什么问题?

lua
1个回答
1
投票

Bruh是一个函数,在简单情况下,应使用括号()放置函数的参数({hai = "hoho"}是一个参数)。在第二段代码中,您改用花括号{},其工作方式略有不同。这就像调用单个表作为参数一样。考虑一下:

function test(word)
  print("The word is...")
  print(word)
end

您可以尝试以几种不同的方式调用此函数,并且输出将根据调用方式而变化。test("Chicken")输出:

The word is...
Chicken

您通过常规方法调用了字符串“ chicken”,该字符串已被函数使用。但是,如果用花括号将其命名,该怎么办?

test{"Chicken"}输出:

The word is...
table: 0x204a710 --the actual location in computer memory of the table {"Chicken"} you wrote

这等效于调用test({"Chicken"})。运行它,输出将相同,但是打印的位置不同,但是表的位置对您并不重要。您可以通过这种方式访问​​“鸡肉”的方法是对参数表进行索引,就像其他任何表一样。

function test(word)
  print("The word is...")
  print(word[1])
end

test{"Chicken"}

输出:

The word is...
Chicken

如果您调用test({"Chicken"}),输出将是相同的>

因此,当您调用“ bruh {

{hai =” hoho“},{yey = 11} }”时,bruh的参数“ a”实际上是由外部一对大括号(粗体)组成的表,因此a.hai不存在,并且将返回nil值。花括号实际上仅应在将一个表作为参数传递并提取函数内部其余值时使用,因为从技术上讲,您不能在该表之后传递任何内容。例如,如果您希望函数打印a.haia.yey,则可以这样编写:print(bruh{hai = "hello", yey = "Bye"})但是问自己:您将如何包含“ b”表?您在Bruh函数中包含了第二个参数,所以我假设您打算尽快编写一个参数。在这种情况下,只需使用括号即可,这可以避免您的头痛。
© www.soinside.com 2019 - 2024. All rights reserved.