Dennis_Chikin 3 665 Опубликовано 4 Января 2015 Поделиться Опубликовано 4 Января 2015 (изменено) С чего начинать и где взять. Установка Lua:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=629106 Руководство «Программирование на языке Lua», третье издание:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905308 Изменено 2 Марта 2015 пользователем Kirgudu Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-905371
Nazgool 250 Опубликовано 7 Июня 2016 Поделиться Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016804
dsh 3 824 Опубликовано 7 Июня 2016 Поделиться Опубликовано 7 Июня 2016 Вот вот, именно это я и имел ввиду, только не умею так развернуто излагать свои мысли. в каких случаях нужна проверка на nil Ну, тебе уже показали пример. Я добавлю. Часто я проверку на nil, или подобное значение в других языках, использую, как третье логическое значение. Т.е. я использую ДА, НЕТ и НЕ ЗНАЮ. Вот nil - это и есть это самое НЕ ЗНАЮ. Ну например. Есть у меня функция, которая возвращает, является-ли данный непись врагом. К примеру. Она возвращает true, что означает безусловно враг; false, что означает безусловно не враг; и nil, что означает не знаю, проверяй другими методами. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016811
Nazgool 250 Опубликовано 7 Июня 2016 Поделиться Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016824
Desertir 202 Опубликовано 7 Июня 2016 Поделиться Опубликовано 7 Июня 2016 (изменено) Поэтому руководствуясь "пишем в коде то, чего требуем", для этого случая достаточно проверки if db.actor then ...До этого я сразу высказался, что в том случае это не принципиально, я вообще за демократию.Возможно было бы лучше вообще написать функцию типа isActor, но вспоминая всякие isWeapon и прочая... Короче, языки с динамической типизацией, они такие. в первом случае void, во втором nil - как совершенно определенный тип значенияА вот тут хочу подискутировать. Строго говоря, в обоих случаях используется массив значений, только в первом случае он пустой, а во втором есть один элемент - nil.К этим ребятам можно добавить еще вот это: function z() -- здесь return'а нет endНу а так как имеем дело с Lua, где значение *ПУСТО* описывается только одним nil'ом, то и получаем, что x()==nil; y()==nil; z()==nil. Т.е. я использую ДА, НЕТ и НЕ ЗНАЮОпять же мой *любимый* JavaScript, этот экземпляр подвида скриптовых умеет переваривать значения null и undefined. В нем функции x() и y() отличаются.null типа "в этой переменной когда то будет значение, наверное" а undefined "я в душе не гребу, что это за переменная, и откуда она взялась" Изменено 7 Июня 2016 пользователем Desertir 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016829
Zander_driver 10 348 Опубликовано 8 Июня 2016 Поделиться Опубликовано 8 Июня 2016 Т.е. я использую ДА, НЕТ и НЕ ЗНАЮ. Вот nil - это и есть это самое НЕ ЗНАЮ. Напомнило комичный случай из личной практики когда начинал писать "скриптовый интерфейс" - он был только инвентарем, и ничем больше. Потом туда же добавилось окно обыска - потребовалось указать при создании интерфейса, что же рисовать. Добавил к входным аргументам еще один. Если он ~= nil - рисуем окно обыска. Потом туда же добавилось ПДА. Потребовалось выяснять еще значение этого аргумента. В итоге интерфейс рисуется по принципу: Нарисовать окно обыска? -> Если да (true), рисуем окно обыска -> Если нет (false), рисуем пда -> Если не известно (nil), рисуем инвентарь. Выглядит забавно, переписать более нормально руки не доходят, так и работает а undefined "я в душе не гребу, что это за переменная, и откуда она взялась" И почему я не пишу на JavaScript, он мне уже заочно нравится Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016835
Kober(BRUC) 99 Опубликовано 8 Июня 2016 Поделиться Опубликовано 8 Июня 2016 Добрый день. Есть у меня допустим такой код: function grenage () alife():create("grenade_f1",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) alife():create("grenade_rgd5",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) end И таких функций несколько. Только создается разные предметы. Например место гранат аптечки и бинты. Здесь как я понимаю переменная local не подойдет. Так как функций несколько, а local ставится только перед одной функцией(как я понял). В целом я хочу упростить эти функции. Т.е. вместо "db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())" написать так(в начале скрипта): position = db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) Ну, а потом уже функции в которых заместо "db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())" будет писаться просто position. Вот так: position = db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) function grenage() alife():create("grenade_f1",position alife():create("grenade_rgd5",position end function med() alife():create("bandage",position alife():create("medkit",position end Будет ли все это дело работать. И еще на последок. Если я сделаю отдельный скрипт где будут "тонны" этих сокращений, можно ли тогда их вызывать. Если да, то как? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016855
naxac 2 578 Опубликовано 8 Июня 2016 Поделиться Опубликовано 8 Июня 2016 (изменено) Будет ли все это дело работатьКонечно нет. Одной переменной можно присвоить только одно значение.В твоём случае можно просто написать функцию для спауна предмета в инвентарь актера, и спаунить все через неё: function spawn_item_in_inv(section) return alife():create(section, vector():set(0, 0, 0), 0, 0, 0) endПотом, соответственно: function med() spawn_item_in_inv("bandage") spawn_item_in_inv("medkit") endP.S.: в функции везде нули, т.к. при спавне в инвентарь координаты значения не имеют. Последний ноль - id актера, он всегда равен 0. Изменено 8 Июня 2016 пользователем naxac 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016864
Nazgool 250 Опубликовано 8 Июня 2016 Поделиться Опубликовано 8 Июня 2016 А вот тут хочу подискутировать Да тут и дискутировать особо не о чем. Только теория.Практическое использование подобного не встречал, да и на граблей на этой основе тоже.Это так, из раздела "Занимательная наука" )) Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1016971
Kober(BRUC) 99 Опубликовано 19 Июня 2016 Поделиться Опубликовано 19 Июня 2016 Добрый вечер. Потихоньку изучая lua столкнулся с такой проблемой: при вызове этого(не в сталкере): number_tbl = { 1, 2, 3, 4, 5, 6, 7, 8, 9} data = math.random(#number_tbl) print(data) Всегда получается число "8". Мне интересно, почему? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1019178
naxac 2 578 Опубликовано 19 Июня 2016 Поделиться Опубликовано 19 Июня 2016 @Kober(BRUC), вызови выше math.randomseed(os.time()) 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1019190
Kober(BRUC) 99 Опубликовано 19 Июня 2016 Поделиться Опубликовано 19 Июня 2016 @naxac, а в сталкере это тоже нужно делать? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1019193
naxac 2 578 Опубликовано 19 Июня 2016 Поделиться Опубликовано 19 Июня 2016 (изменено) @Kober(BRUC), не знаю, но я делаю каждый раз на загрузке, "на всякий случай")) Изменено 19 Июня 2016 пользователем naxac 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1019194
Kober(BRUC) 99 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 Есть "ужасный" код: random = true say_tbl = { "Текст1", "Текст2", "Текст3", "Текст4", "Текст5", "Текст6", "Текст7", "Текст8", "Текст9", "Текст10"} data = math.randomseed(os.time()) data = math.random(1,10) if random and data == 1 then print(say_tbl[1]) elseif random and data == 2 then print(say_tbl[2]) elseif random and data == 3 then print(say_tbl[3]) elseif random and data == 4 then print(say_tbl[4]) elseif random and data == 5 then print(say_tbl[5]) elseif random and data == 6 then print(say_tbl[6]) elseif random and data == 7 then print(say_tbl[7]) elseif random and data == 8 then print(say_tbl[8]) elseif random and data == 9 then print(say_tbl[9]) elseif random and data == 10 then print(say_tbl[10]) end Хотел сделать его попроще и изменил вот на это: random = true say_tbl = { "Текст1", "Текст2", "Текст3", "Текст4", "Текст5", "Текст6", "Текст7", "Текст8", "Текст9", "Текст10"} data = math.randomseed(os.time()) data = math.random(#say_tbl) if random == true or random == nil then print(data) end Но вот беда. Вместо текста появляются числа от одного до десяти. Как это дело исправить? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1021213
Nazgool 250 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 (изменено) print(say_tbl[data]) И ещё, math.randomseed ничего не возвращает, поэтому записывать в переменную data нечего. Изменено 27 Июня 2016 пользователем Nazgool 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1021215
Kober(BRUC) 99 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 Добрый день. Есть такой код: language = eng -- ru or eng random_shpare = true -- Шар вкл/выкл say_tbl_ru = { -- Таблица с русскими ответами "да", "нет", "возможно", "не знаю"} say_tbl_eng = { -- Таблица с английскими ответами "Yes", "No", "Possible", "Don't know"} function random_shpare_language() if language == ru then -- Если глобальная переменная language равна ru sphare_ru() -- То вызываем эту функцию elseif language == eng then -- Если глобальная переменная language равна eng sphare_eng() -- То вызываем эту end end data_ru = math.randomseed(os.time()) data_ru = math.random(#say_tbl_ru) data_eng = math.randomseed(os.time()) data_eng = math.random(#say_tbl_eng) function sphare_ru() if random_shpare == true -- Если Шар включен(true) or random_shpare == nil then -- Или равен любому другому значению кроме false print(say_tbl_ru[data_ru]) -- То выводим данный текст end end function sphare_eng() if random_shpare == true -- Если Шар включен(true) or random_shpare == nil then -- Или равен любому другому значению кроме false print(say_tbl_eng[data_eng]) -- То выводим данный текст end end random_shpare_language() Сам код работает, но вот смена языка нет. Всегда текст появляется на русском. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1021328
Nazgool 250 Опубликовано 27 Июня 2016 Поделиться Опубликовано 27 Июня 2016 Замени language = 'eng' ... if language == 'ru' ... elseif language == 'eng' 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1021334
Kober(BRUC) 99 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 Добрый день. Написал такой код: all_tbl = { q, w, e, r, t, y, u, i, o, p, a, s, d, f, g, h, j, k, l, z, x, c, v, b, n, m, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0} local on = true function zoz() if on then oz() end end function oz() for fg = 1, 15 do math.randomseed(os.time()) random = math.random(#all_tbl) print(all_tbl[random]) end end zoz() Но значения берутся не из таблицы, а равны nil. В чем же проблема? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1024113
Kirgudu 1 328 Опубликовано 8 Июля 2016 Поделиться Опубликовано 8 Июля 2016 @Kober(BRUC), потому что сейчас это не массив, а не пойми что. Каждый буквенный элемент следует заключить в кавычки. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1024136
naxac 2 578 Опубликовано 9 Июля 2016 Поделиться Опубликовано 9 Июля 2016 Приветствую. Меня интересует - куда Луа определяет переменную, которую инициализируют, например, так: function mmm() var = 123 endИ раньше она нигде не была объявлена.Где ее можно найти? В _G? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1024391
dsh 3 824 Опубликовано 9 Июля 2016 Поделиться Опубликовано 9 Июля 2016 @naxac, подозреваю, в глобальном пространстве имен оно будет, т.е. в G. Хорошая, кстати, грабля. Ошибиться достаточно легко, а причину глюков потом искать у-у-у... 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/57/#findComment-1024426
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти