Предположим, что я вставляю строку в таблицу следующим образом:
table.insert(tbl, mystring)
и это mystring
сгенерирован путем замены всех случаев "a" с "b" в input
:
mystring = string.gsub(input, "a", "b")
Очевидный способ объединить два в один оператор не работает, потому что gsub
возвраты два результата:
table.insert(tbl, string.gsub(input, "a", "b")) -- error!
-- (second result of gsub is passed into table.insert)
который, я предполагаю, является ценой, заплаченной за поддержку нескольких возвращаемых значений. Вопрос, там стандартный, встроенный способ выбрать просто первое возвращаемое значение? Когда я нашел select
Я думал, что это было точно, что это сделало, но увы, это на самом деле выбирает все результаты N вперед и так не помогает в этом сценарии.
Теперь я знаю, что могу определить свое собственное select
следующим образом:
function select1(n, ...)
return arg[n]
end
table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
но это не выглядит правильным, так как я ожидал бы встроенный способ сделать это.
Так, я пропускаю некоторую встроенную конструкцию? В противном случае сделайте разработчики Lua склонны использовать отдельную переменную, чтобы извлечь корректный аргумент или записать их собственное select1
функции?
Выражение можно окружить скобками:
table.insert(tbl, (string.gsub(input, "a", "b")))
При этом будет выбран только первый результат.
Чтобы получить n-й результат, вы можете использовать select
и окружить его скобками:
func1( (select(n, func2())) )
Помещение выражения в скобки, как по этому:
table.insert(tbl, (string.gsub(input, "a", "b"))))
приведет к принудительному возврату одного значения. Или вы можете поймать их обоих так:
str,cnt = string.gsub(input, "a", "b")
table.insert(tbl, str)
или, что еще лучше, пустышка поймает его, чтобы сохранить переменную:
str,_ = string.gsub(input, "a", "b")
table.insert(tbl, str)