Я пытаюсь упростить сценарий, и мои попытки не работают. Я делаю функцию, которая передаст данные аргументы и превратит их в индексированную таблицу, но я хочу иметь возможность передавать как кавычки, так и без кавычек, а функция распознает, что цитируемые аргументы считаются одним значением, а также -которые аргументы.Lua: Котируемые аргументы передаются как один в функции
Например:
makelist собака «коричневая мышь» кошка тигр «красочный попугай»
должен возвращать индексированную таблицу, как следующее:
list_table = {"dog", "brown mouse", "cat", "tiger", "colorful parrot"}
код, который я имею дела для цитаты, но это беспорядок на не кавычки, и, кроме того, добавляет цитируемые аргументы во второй раз. Вот что у меня есть:
function makelist(str)
require 'tprint'
local list_table = {}
for word in string.gmatch(str, '%b""') do
table.insert(list_table, word)
end
for word in string.gmatch(str, '[^%p](%a+)[^%p]') do
table.insert(list_table, word)
end
tprint(list_table)
end
Я не понимая, почему упущение кавычки игнорируется, а также отрубить первую букву. То есть, это выход я получаю от tprint (функция, которая печатает таблицу из, не относящиеся к коду):
makelist('dog "brown mouse" cat tiger "colorful parrot"')
1=""brown mouse""
2=""colorful parrot""
3="og"
4="rown"
5="mouse"
6="cat"
7="tiger"
8="olorful"
9="parrot"
Как вы можете видеть, «D», «B» и «с ' не хватает. Какие исправления мне нужно сделать, чтобы я мог получить следующий результат?
1="brown mouse"
2="colorful parrot"
3="dog"
4="cat"
5="tiger"
Или еще лучше, пусть они сохраняют тот же порядок, в котором они были продиктованы как аргументы, если это вообще возможно.
что, не комментарий на этот раз ?!;) Это не будет работать на несбалансированные кавычки, например, примерить 'Foo«unbalanced', хотя можно утверждать, что это добродетель. –
Ха-ха, очень добродетель, я полагаю! Удивительный ответ на это! И ничего себе, я удивлен, ты на самом деле ответил вместо комментариев! Спасибо, Егор! – Josh