Обсуждение модуля:Ссылки

Материал из ВикиФур
Перейти к: навигация, поиск

Tests[править]

Модуль:Ссылки/tests

5 tests failed.

test_da:

Text Expected Actual
Fail {{#invoke:Ссылки|da|Rocket Raccoon}} Поиск слов Rocket Raccoon на deviantART Поиск слов Rocket Raccoon на deviantART
Fail {{#invoke:Ссылки|fa|Rocket Raccoon}} Поиск слов Rocket Raccoon на Fur Affinity
Fail {{#invoke:Ссылки|rule34x|Rocket Raccoon}} Метка rocket_raccoon в эротической галерее rule34.xxx
Fail {{#invoke:Ссылки|rule34p|Rocket Raccoon}} Метка rocket_raccoon в эротической галерее rule34.paheal.net
Fail {{#invoke:Ссылки|e621|Rocket Raccoon}} Метка rocket_raccoon в эротической галерее e621.net
Ok {{#invoke:Ссылки|derpibooru|pinkie pie}} Метка pinkie pie на derpibooru Метка pinkie pie на derpibooru



main[править]

Предлагаю заменить название основного вызова на какое-нибудь русское слово. Переименовать Lua-функцию нельзя, но можно сделать ей псевдоним. В Генеалогии это сделано так:

function p.family_tree(frame)
...
end
p['семейное древо']=p.family_tree;

…и вот уже можно вызывать {{#invoke:Генеалогия|семейное древо|...}} EvilCat (обсуждение) 11:32, 5 сентября 2015 (MSK)

pairs[править]

В Lua есть такая хитрая штука.

  for name, value in pairs(tags) do
    if name==1 then
      ret = '[' .. func(value) .. ']'
    else
      ret = ret .. ', ' .. '[' .. func(value) .. ']'
    end
  end

Этот кусок кода явно рассчитывает, что итератор pairs переберёт tags по порядку. Но это не так: pairs перебирает все пары «ключ-значение» в таблице в произвольном порядке. Итератор ipairs перебирает все числовые ключи таблицы, пропуская строковые, и порядке от 1 до первого же, значение которого равно null. Таблицы в Lua вообще не различают отсутствие ключа и элемент, приравненный к null. С их точки зрения «массив» (часть таблицы с числовыми ключами) начинается с ключа 1 и заканчивается на первом ключе, значение которого null, что бы там ни шло «дальше».

В подобных конструкциях лучше проверять, является ли создаваемое значение (ret) пустым, и если нет — ставить запятую. Ну, или же создавать ret как массив обработанных строк, а потом объединить его в строку с нужным разделителем. EvilCat (обсуждение) 14:46, 7 сентября 2015 (MSK)

Это была попытка написать что-то вроде такого (псевдокод):
ret =  '[' + func(tags[0]) + ']';
for (int i=1; i<tags.len(); i++){
  ret += ', ' + '[' + func(tags[i]) + ']';
}
asd (обсуждение) 18:31, 7 сентября 2015 (MSK)