Какая польза от замены парантеза фигурными скобками при передаче параметров в функцию? - PullRequest
0 голосов
/ 09 января 2020
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

В чем проблема с моим кодом?

1 Ответ

2 голосов
/ 09 января 2020

Bruh - это функция, и в простых случаях вы должны использовать круглые скобки () для размещения параметров вашей функции ({hai = "hoho"} - это параметр). Во втором блоке кода вы использовали вместо этого фигурные скобки {}, которые работают немного по-другому. Это похоже на вызов единственной таблицы в качестве параметра. Учтите это:

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

Вы можете попытаться вызвать эту функцию несколькими различными способами, и результат будет меняться в зависимости от того, как вы ее вызываете. test("Chicken") output:

The word is...
Chicken

Вы назвали строку "chicken" с помощью обычного метода, и она использовалась функцией. Но что, если вы называете это с помощью фигурных скобок?

test{"Chicken"} output:

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} } ", параметр «a» из bruh фактически является таблицей, составленной из внешней пары фигурных скобок (выделено жирным шрифтом), поэтому a.hai не существует и вернет ноль значение. Фигурные скобки следует использовать только тогда, когда вы передадите одну таблицу в качестве параметра и извлечете остальные значения внутри функции, потому что технически вы ничего не можете передать после таблицы. Например, если вы хотите, чтобы функция печатала a.hai и a.yey , вы могли бы написать это: print(bruh{hai = "hello", yey = "Bye"}) Но спросите себя: как бы вы включили " б " стол? Вы включили второй параметр в функцию Bruh, поэтому я предполагаю, что вы собираетесь написать его в ближайшее время. Просто используйте скобки в этом случае, это избавит вас от головной боли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...