Нет никакого ошибочного события для тега script. Можно сказать, когда это успешно, и предположите, что это не загрузилось после тайм-аута:
<script type="text/javascript" onload="loaded=1" src="....js"></script>
Как уже говорилось в других ответах, оператор конкатенации строк в Lua - это две точки.
Ваш простой пример мог бы быть записан так:
filename = "checkbook"
filename = filename .. ".tmp"
Однако есть предостережение, о котором следует помнить. Поскольку строки в Lua неизменяемы, каждая конкатенация создает новый строковый объект и копирует в него данные из исходных строк. Это приводит к очень низкой производительности последовательных конкатенаций в одну строку.
Идиома Lua для этого случая выглядит примерно так:
function listvalues(s)
local t = { }
for k,v in ipairs(s) do
t[#t+1] = tostring(v)
end
return table.concat(t,"\n")
end
Собирая строки для конкатенации в массив t
, стандартная библиотечная процедура table.concat
может быть используется для их объединения (вместе со строкой-разделителем между каждой парой) без ненужного копирования строк.
Обновление: Я только что заметил, что изначально я написал приведенный выше фрагмент кода, используя pair ()
вместо ipairs ()
.
Как было написано изначально, функция listvalues ()
действительно выдает каждое значение из переданной таблицы, но не в стабильном или предсказуемом порядке. С другой стороны, он будет включать значения, ключи которых не являются положительными целыми числами в диапазоне от 1
до #s
. Именно это и делает pair ()
: он производит каждую отдельную пару (ключ, значение), хранящуюся в таблице.
В большинстве случаев, когда вы использовали бы что-то вроде listvaluas ()
] вы были бы заинтересованы в сохранении их порядка. Таким образом, вызов, записанный как listvalues {13, 42, 17, 4}
, приведет к созданию строки, содержащей эти значения в указанном порядке. Однако, Pair ()
этого делать не будут, они будут перечислять их в некотором порядке, который зависит от базовой реализации структуры данных таблицы. Известно, что порядок зависит не только от ключей, но и от порядка, в котором ключи были вставлены и другие ключи удалены.
Конечно, ipairs ()
тоже не идеальный ответ. . Он перечисляет только те значения таблицы, которые образуют «последовательность». То есть те значения, ключи которых образуют сплошной блок, охватывающий от 1 до некоторой верхней границы, которая (обычно) также является значением, возвращаемым оператором #
. (Во многих случаях саму функцию ipairs ()
лучше заменить на более простой цикл for
, который просто считает от 1
до #s
] Это рекомендованная практика в Lua 5. 2 и в LuaJIT, где более простой цикл for
может быть реализован более эффективно, чем итератор ipairs ()
.)
Если pair ()
действительно является правильный подход, то обычно бывает так, что вы хотите распечатать и ключ, и значение. Это снижает озабоченность по поводу порядка, делая данные самоописывающими. Конечно, поскольку любой тип Lua (кроме nil
и с плавающей запятой NaN
) может использоваться в качестве ключа (а NaN
также может быть сохранен как значение ) поиск строкового представления оставлен в качестве упражнения для учащегося. И не забывайте о деревьях и более сложных структурах таблиц.
Если pair ()
действительно правильный подход, то обычно это тот случай, когда вы хотите распечатать и ключ, и значение. Это снижает озабоченность по поводу порядка, делая данные самоописывающими. Конечно, поскольку любой тип Lua (кроме nil
и с плавающей запятой NaN
) может использоваться в качестве ключа (а NaN
также может быть сохранен как значение ) поиск строкового представления оставлен в качестве упражнения для учащегося. И не забывайте о деревьях и более сложных структурах таблиц.
Если pair ()
действительно правильный подход, то обычно это тот случай, когда вы хотите распечатать и ключ, и значение. Это снижает озабоченность по поводу порядка, делая данные самоописывающими. Конечно, поскольку любой тип Lua (кроме nil
и с плавающей запятой NaN
) может использоваться в качестве ключа (а NaN
также может быть сохранен как значение ) поиск строкового представления оставлен в качестве упражнения для учащегося. И не забывайте о деревьях и более сложных структурах таблиц.
nil
и с плавающей запятой NaN
) может использоваться в качестве ключа (и NaN
также может быть сохранен как значение), поиск строковое представление оставлено в качестве упражнения для студента. И не забывайте о деревьях и более сложных структурах таблиц. поскольку любой тип Lua (кроме nil
и с плавающей запятой NaN
) может использоваться в качестве ключа (и NaN
также может быть сохранен как значение), поиск строковое представление оставлено в качестве упражнения для студента. И не забывайте о деревьях и более сложных структурах таблиц. Если вы спрашиваете, есть ли сокращенная версия оператора ..
- нет, нет. Вы не можете написать a .. = b
. Вам нужно будет ввести его полностью: filename = filename .. ".tmp"
Конкатенация:
Оператор конкатенации строк в Lua обозначается двумя точками ('..'). Если оба операнда являются строками или числами, они преобразуются в строки в соответствии с правилами, упомянутыми в §2.2.1. В противном случае вызывается метаметод "concat" (см. §2.8).
Строки можно соединить вместе с помощью оператора конкатенации ".."
, я думаю, то же самое для переменных