В Lua я могу легко выбрать Энный результат без пользовательских функций?

Предположим, что я вставляю строку в таблицу следующим образом:

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 функции?

5
задан hjpotter92 18 September 2013 в 14:17
поделиться

2 ответа

Выражение можно окружить скобками:

table.insert(tbl, (string.gsub(input, "a", "b")))

При этом будет выбран только первый результат.

Чтобы получить n-й результат, вы можете использовать select и окружить его скобками:

func1( (select(n, func2())) )
11
ответ дан 18 December 2019 в 07:28
поделиться

Помещение выражения в скобки, как по этому:

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)
5
ответ дан 18 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: