Stinger 0 Опубликовано: 3 октября, 2017 (изменено) Здравствуйте друзья, проблема следующая в моей версии lua 5.0 напроч отсутствует функция #, можно ли как то заменить её ? Очень нужна, обновить lua невозможно зашито в exe файл, буду признателен за вашу помощь. Вот ошибка: unexpected symbol near '#' , неизвестный символ говорит. Изменено 3 октября, 2017 пользователем Stinger Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 3 октября, 2017 (изменено) Можно набросать свою. Если надо именно по индексам считать, как делает стандартная функция: local a = {"a", "b", "c"} function size(t) local index = 0 while true do if t[index+1] then index = index + 1 else return index end end end print(size(a)) А для длины строк можно string.len(str) юзать. (Для русских строк - стырить функцию из модуля unicode =)). Изменено 3 октября, 2017 пользователем Totoro 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 октября, 2017 А что нужно именно получить? Длину строки? можно так str = 'aabbcc' print(str:len()) или для чего она еще нужна именно? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Stinger Автор вопроса 0 Опубликовано: 3 октября, 2017 Спасибо за ответ, ваше решение достаточно хорошее но везде использовать функцию вместо символа не очень согласитесь, есть ли возможность написать функцию под символ ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Stinger Автор вопроса 0 Опубликовано: 3 октября, 2017 (изменено) Допустим у меня длинная функция и вместо того что бы везде подставить #a #b #c #d я буду вынужден подставлять size(a) size(b) size© size(d), есть ли какое то более оптимальное решение ? Или для данной версии это максимум, чего можно достигнуть ? Так же большое спасибо за быстрый ответ. Изменено 3 октября, 2017 пользователем Alex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 3 октября, 2017 Допустим у меня длинная функция и вместо того что бы везде подставить #a #b #c #d я буду вынужден подставлять size(a) size(b) size© size(d), есть ли какое то более оптимальное решение ? https://hastebin.com/ogisidixak.lua 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Stinger Автор вопроса 0 Опубликовано: 3 октября, 2017 Большое спасибо, думаю можно закрывать тему, всем спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 октября, 2017 есть ли возможность написать функцию под символ вряд ли) вызов функции уже в себя должен вмещать имя и кавычки. То что в новых версиях луа есть в синтаксисе # , так это реализовано, видимо, на уровне самого языка, и парсер, судя по всему, знает, что это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 3 октября, 2017 (изменено) Или так можно. https://hastebin.com/idufakifim.lua Код не проверял. Можно сразу передать функции много переменных и она на выходе выдаст размеры их. local s1, s2, s3 = size(arr1, arr2, "hello world") Изменено 3 октября, 2017 пользователем NEO 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Stinger Автор вопроса 0 Опубликовано: 3 октября, 2017 Или так можно. https://hastebin.com/idufakifim.lua Код не проверял. Можно сразу передать функции много переменных и она на выходе выдаст размеры их. local s1, s2, s3 = size(arr1, arr2, "hello world") Спасибо, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 3 октября, 2017 (изменено) Поправил и добавил функцию от Тоторы. http://prntscr.com/gsrkff https://hastebin.com/areceruziy.lua Изменено 3 октября, 2017 пользователем NEO 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Stinger Автор вопроса 0 Опубликовано: 3 октября, 2017 Супер, всё работате как часы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 3 октября, 2017 На сколько я помню в луа таблицах есть такой прикол {1, 2, 3, nil, nil, nil, 7} покажет размер 3, так что выше описанные примеры могут не работать, есть вариант использовать через for in pairs() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 октября, 2017 так что выше описанные примеры могут не работать ну так то да, size_table будет считать элементы до первой "дырки" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 3 октября, 2017 На сколько я помню в луа таблицах есть такой прикол {1, 2, 3, nil, nil, nil, 7} покажет размер 3, так что выше описанные примеры могут не работать, есть вариант использовать через for in pairs() У меня вроде и считает до первой "дырки". Максимально аутентичная функция. =) Насчёт определить функцию в виде символа. В Луа это делается через метатаблицы. Но загвоздка в том, что переопределить можно поведение только тех операторов, которые знает язык. А оператор решётки ввели в Lua 5.2+. Так что придётся довольствоваться обычной функцией size. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 3 октября, 2017 Максимально аутентичная функция. =) не совсем Длиной таблицы t считается любой целый индекс n такой, что t[n] не равен nil, а t[n+1] равно nil. Кроме того, если t[1] равен nil, то #t = 0. Для регулярных массивов от 1 до n, не содержащих значений nil, длиной является n, то есть индекс последнего значения. Если в массиве присутствуют "дыры" (т.е., значения nil между ненулевыми значениями), то значением #t является индекс элемента, непосредственно предшествующего элементу nil (поэтому любое значение nil по сути означает конец массива). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 4 октября, 2017 не совсем Что за дьявольская магия? =) Написано же - "любое значение nil по сути означает конец массива" но твой пример кода этому противоречит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 4 октября, 2017 Что за дьявольская магия? =) Написано же - "любое значение nil по сути означает конец массива" но твой пример кода этому противоречит. Меня тоже удивила такая логика. Но всё-таки формулировка "любое значение nil" не подразумевает "с минимальным индексом". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 4 октября, 2017 Что за дьявольская магия? =) это еще бубочки, можно сказать, цветочки даже, а вот ягодки: t1={1,2,3} -->3 t2={nil} -->0 --окай, вроде все норм t3={1,2,nil,4} -->4 t4={nil,nil,nil,nil,nil,nil,nil,8} -->8 t5={nil,nil,nil,nil,5,6,7,nil,nil,10} -->10 --хм, вроде как выходит, что если последний элемент не равен nil, --то его значение индекса и будет являться длиной массива(но не факт) t6={1, 2, 3, nil, nil, 6, nil} -->3 --длина уже до первой дырки, один nil в конце массива, НО --вот сейчас начинается дьявольская магия, дичь и взрыв мозга t7={1,2,nil,4,nil} -->2 окай, до первой дырки видимо, считает t8={1, 2, nil, 4, nil, nil, nil, nil} -->4 ПОЧЕМУУУ?????))) Если больше одного нила, то ВСЕ нилы откусывает вообще с конца???? print('1:',#t1) print('2:',#t2) print('3:',#t3) print('4:',#t4) print('5:',#t5) print('6:',#t6) print('7:',#t7) print('8:',#t8) 1: 3 2: 0 3: 4 4: 8 5: 10 6: 3 7: 2 8: 4 не понял логики... почему так происходит? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 4 октября, 2017 Загадочный Луа. Кстати, по теме. В старых версиях Lua существовала своя альтернатива хеш-оператору: print(table.getn{10,2,4}) Как раз в Lua 5.0 должна работать по идее. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
swg2you 403 Опубликовано: 4 октября, 2017 (изменено) А так Varname:len Можно в 5.0? Upd: Я б всеже попробовал повесить на таблицу и строку метаметод. Какуйто унарную операцию которая не имеет смысла для этих типов. Изменено 4 октября, 2017 пользователем swg2you Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Здравствуйте друзья, проблема следующая в моей версии lua 5.0 напроч отсутствует функция #, можно ли как то заменить её ?
Очень нужна, обновить lua невозможно зашито в exe файл, буду признателен за вашу помощь.
Вот ошибка: unexpected symbol near '#' , неизвестный символ говорит.
Изменено пользователем StingerПоделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах