Nazgool 251 Опубликовано 21 Августа 2015 (изменено) , Да также второй вариант печатает и в игре - 'vasya\new'. У меня по крайней мере. Правда стоит lua by RvP. Может и поэтому ??? Изменено 21 Августа 2015 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 21 Августа 2015 (изменено) Попробуй st:SetText([[vasya\new]]) Это конечно то же самое что и "vasya\\new", но SetTextComplexMode явно работает не так как в lua. Хотелось бы исключить все (нормальные) варианты. Изменено 21 Августа 2015 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 21 Августа 2015 (изменено) Что сказать? Видимо строка разбирается в С, а не в lua.Ничего тут не сделаешь, кроме как переписывать в движке. Изменено 21 Августа 2015 пользователем Nazgool 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Июня 2016 (изменено) Позволю и себе высказать мнение о проверке на nil в примере Kober(BRUC). Считаю что такая проверка абсолютно бесполезна. Ну хорошо. db.actor не nil. Остается 7 типов значений (перечислять не буду) Как это поможет, если db.actor окажется, например, числом? К этому числу будет применен метод position, ну или какой другой. Результат всё равно не изменить. Крах. Тут просто, видимо, разработчики предполагали что при наявности actor-a в таблице db обязательно будет создано поле actor, и его значением обязательно будут данные actor-а. Значит достаточно проверить: есть данные этого поля - есть actor нет данных - нет actor-а Поэтому руководствуясь "пишем в коде то, чего требуем", для этого случая достаточно проверки if db.actor then ... Именно это и требуется - проверка на то, что там есть реальные(не nil, а прицепом и не false) данные. Другое дело, когда очень хочется сравнить с чем-то, то вместо сравнения с nil, гораздо полезнее поставить сравнение с типом "userdata". Так вариантов для прокола станет намного меньше. Изменено 7 Июня 2016 пользователем Nazgool 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Июня 2016 (изменено) Говорим про nil, а Desertir напомнил про неэквивалентность. Вот я и вспомнил, хотя уже когда-то писал: Запись : function x() return end не эквивалентна : function y() return nil end Вроде бы и одинаковы : print(x()==nil) --> true print(y()==nil) --> true Но : print(select('#', x())) --> 0 print(select('#', y())) --> 1 в первом случае void, во втором nil - как совершенно определенный тип значения Изменено 7 Июня 2016 пользователем Nazgool 1 2 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 8 Июня 2016 А вот тут хочу подискутировать Да тут и дискутировать особо не о чем. Только теория.Практическое использование подобного не встречал, да и на граблей на этой основе тоже.Это так, из раздела "Занимательная наука" )) Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 27 Июня 2016 (изменено) print(say_tbl[data]) И ещё, math.randomseed ничего не возвращает, поэтому записывать в переменную data нечего. Изменено 27 Июня 2016 пользователем Nazgool 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 27 Июня 2016 Замени language = 'eng' ... if language == 'ru' ... elseif language == 'eng' 1 Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Октября 2016 (изменено) @Dennis_Chikin, Ещё с момента публикации хотел спросить, - "И зачем это нужно в принципе?"Я к чему. Все уже давно привыкли, что если нет ни того ни другого, то будет nil. И когда я так напишу, то и буду ожидать что 'p' станет 'nil'-ом. А оно не станет. Такое многим не понравиться. Lua stalker-а и без этого сильно не предсказуема. Хотя-я-я. В этом же стиле. Так что можно. А-а-а. Чего пишу-то. Пишу любителям SciTE. Замутил тут одну штуку. Давно хотел, да плевал, а тут вот ""з`явилася нагода". В общем добавил в меню 'Tools" выбор разных версий lua и быстрое переключение на эти версии с изменением подсветки синтаксиса и т.д. Дело в том, что все актуальные версии для платформ x86 и x64 у меня есть, а вот для luajit 1.1.5 есть только одна. На x86 у меня работает, значит нет для x64 (я имею в виду бинарники). Может у кого-то завалялась? Другие версии JIT (1,1,6-1,1,8) не интересуют. Да, если кому-то это нужно в SciTE, то милости прошу. Доделаем как это будет нужно и в конце концов правильно. А то леплю тут как придется Изменено 7 Октября 2016 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 7 Октября 2016 @abramcumner, Вот я и думаю, почему у меня есть все, а этой нет. Спасибо. Буду знать и не искать Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 28 Марта 2017 (изменено) Это аналог require(module_name) из академического.. lua. Идет подгрузка модуля(файла) с именем module_name. Изменено 28 Марта 2017 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 20 Июня 2017 Доводилось использовать несколько версий lua ТЧ а также стандартные 5.1 - 5.3 Различий не замечал. А записи абсолютно эквивалентны."k" и "v" (да как угодно их называй) - это локальные переменные внутри цикла. Функция "pairs (t)" в любой версии (по крайней мере использованных мною) возвращает три значения - функцию next, таблицу t и nil. Т.е. for k, v in pairs(t) do можно переписать как: for k, v in next,t,nil do И теперь видно, что мы имеем дело с функцией "next" Т.е. твой вопрос переадресовывается от функции "pairs" к функции "next" Впрочем и за next-ом различных версий я тоже ничего криминального не замечал, т.е. она как возвращала два значения, так и возвращает. Те самые "k" и "v" . А как ты их будешь использовать - это сугубо твоё дело. Хоть "k" и "_" , хоть "_" и "v" , хоть только "k". Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 14 Августа 2017 (изменено) Dennis_Chikin Я хоть и ответил, но до чертиков в интересно, а что же такое случилось с lua, что в загалi возник такой вопрос? Это к чему? Ты (Dennis_Chikin) такой человек, что (все уже привыкли, что знаешь много) вроде такие вопросы от тебя слышать как-то... необычно что-ли? Ну как-то так выходит. Изменено 14 Августа 2017 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 6 Декабря 2017 (изменено) dsh Всё просто кажется сложным. На самом деле обычно не хватает времени разобраться. А дела обстоят так. Действительно, у таблицы 'db' существует метаблица, которая посредством метаметода '__index' ссылается на глобальную таблицу '_G'. Поэтому совершенно естественно, что при запросе несуществующего поля таблицы 'db', поиск поля с таким именем происходит в таблице, на которую указывает '__index'. Т.е. в таблице '_G' И это не прихоть игры, таковы законы Lua. Любой модуль (module) при указании 'package.seeall' будет искать "недостающие" поля в таблице '_G'. И избавиться от такого поведения (как вы говорите) можно совершенно стандартными способами Lua. Для это существую стандартные функции Lua - rawget и rawset. Т.е. давайте перепишем Ваш пример так: rawset(db, 'actor_test',nil) _G.actor_test = "shit" И теперь напечатайте: log3( "dsh: actor_test = %s", tostring( rawget(db.actor_test)) Изменено 6 Декабря 2017 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 6 Декабря 2017 (изменено) Ну если так не подходит, то тогда (по степени сложности) нужно подумать над тем, чтобы переписать функцию '__index'. Как следующий в цепочке ивентов. Или тоже не вариант? Изменено 6 Декабря 2017 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение
Nazgool 251 Опубликовано 6 Декабря 2017 (изменено) dsh Да для меня написать подобный код - не проблема. Печально только что никому сейчас это не нужно Да что там... давно уже никому не нужно. Изменено 6 Декабря 2017 пользователем Nazgool Поделиться этим сообщением Ссылка на сообщение