halt
Парни, привет. Что то я не врублюсь... подскажите выполняю запрос в pgsql local luasql = require "luasql.postgres" -- -- Настройки подключения к базе PostgreSQL DBHOST = '127.0.0.1' DBNAME = 'freeswitch' DBUSER = 'freeswitch' DBPASS = 'professional' DBPORT = '5432' local env = assert (luasql.postgres()) local dbcon = env:connect(DBNAME, DBUSER, DBPASS, DBHOST, DBPORT) GET_PRICE = "SELECT * FROM destinations WHERE '".. destination .."' LIKE CONCAT(prefix,'%') ORDER BY CHAR_LENGTH(prefix) DESC OFFSET 0 LIMIT 1" res, serr = dbcon:execute(GET_PRICE) dbcon:close() env:close() print(GET_PRICE) как вывести значение полученное из запроса в БД? где то я косячу
halt
print(res) ?
Yuriy
Там скорее всего курсор
Yuriy
даже не скорее всего а точно
Yuriy
аесть же у luasql examples
halt
PostgreSQL cursor (0x12b06c8)
Yuriy
cur = assert (con:execute"SELECT name, email from people") -- print all rows, the rows will be indexed by field names row = cur:fetch ({}, "a") while row do print(string.format("Name: %s, E-mail: %s", row.name, row.email)) -- reusing the table of results row = cur:fetch (row, "a") end
Yuriy
https://keplerproject.github.io/luasql/examples.html
Mikhail
Snusmumriken
Каких доков?
Snusmumriken
Тут прекол в том что всё на сишке, и ты ручками прописываешь линуксовый и вендовый варианты, а потом почти одинаково их собираешь.
Anonymous
Как вернуть обратное значение? Например self.mabestvar = false function HelloWorld() return ~mabestvar end или return not mabestvar?
Anonymous
ну типо нужно вернуть обратное значение переменной
Anonymous
То есть если переменная тру то вернуть фолс и тд
Anonymous
ок
Anonymous
я просто думал либо not var либо ~var
Anonymous
Неа, в Сишарпе !var
Anonymous
Да
Anonymous
Почему?
Anonymous
я забыл что можно гуглитьахахахаах
Господин
ооп в луа вообще норм юзать,или это не тот язык?
mva
То есть если переменная тру то вернуть фолс и тд
2) а что может быть "и т.д."? У чего кроме булевых значений может быть "обратное" значение?
mva
Тру/фолс
перечитай мой вопрос ещё раз, пожалуйста
Господин
кто то юзает у себя? либа или сами?
Господин
я читал это. мне интересно не как это сделать, а кто это делает у себя
Snusmumriken
Ну а так - local Class = {} Class.__index = Class function Class:new(x, y) self = setmetatable({}, self) self.x, self.y = x, y return self end local SubClass = setmetatable({}, {__index = Class}) SubClass.__index = SubClass function SubClass:new(x, y, w, h) self = Class.new(self, x, y) self.w, self.h = w, h return self end
Snusmumriken
Имхо, ООП в луа слишком просто пишется, чтобы делать отдельные библиотеки, мутить лишние файлы в проекте, подключать эту ерунду и всякое такое. Так-то у луа пишется почти как в питоне, правда, без всяких интерфейсов-декораторов. И нужно совершить пару "слегка непонятных действий" вроде class.__index = class и переопределить self через setmetatable.
bebebe
ооп в луа вообще норм юзать,или это не тот язык?
http://lua-users.org/wiki/ObjectOrientationTutorial первое предложение
Snusmumriken
http://lua-users.org/wiki/ObjectOrientationTutorial первое предложение
Это фигня. Тут всего-то пишут что "нет по умолчанию", то есть, фактически, нет ключевого слова class, которое дефайнит новый класс. И намёк на то что мы можем мутить свои объекты какие хотим, но есть пара максимально простых методов.
bebebe
видимо мы с вами по разному "ООП" понимаем
Snusmumriken
Итак, что ты понимаешь под ООП? : )
Snusmumriken
Я под ООП воспринимаю возможность создать коробочку (или фабрику коробочек) с рычажками, и я такой кручу ручки, давлю на кнопки - а эта коробочка там внутри жужжит, что-то делает, выдаёт мне какой-то результат, моргая лампочками. А ещё, я могу сделать коробочку из кучи таких коробочек. Самая простая ассоциация - объект как некоторое "устройство", объединение некоторого состояния и методов работы с этим состоянием.
bebebe
понятно 😉 Господин ^^^ вот такое вот ООП есть в lua
Snusmumriken
А оригинальная интерпретация ООП (smalltalk) - это огромная куча независимых акторов которые шлют друг другу сообщеньки, и принимающая сторона уже думает, как среагировать на это сообщение. Никаких тебе публичных методов, которые дёргают все кому не лень. Так что наши с тобой представления об ООП по умолчанию ошибочны, смоллтолк сказал что должно быть так - значит у всех должно быть так. И у С++ тоже нет никакого ООП. Так что тут - сплошная вкусовщина и отсутствует хоть какой-то смысл делать что-то сложнее чем коробочка с ручками-кнопочками.
Snusmumriken
У жавы нет ООП, у питона нет ООП и у JS нет ООП. Это всё - чёртовы коробочки с ручками. Фууу.
bebebe
я думал что ООП - это парадигма программирования
bebebe
в луа, эта парадигма достаточно ограничена
Snusmumriken
Ой. чем она ограничена? В том-то и фигня что она вообще ничем не ограничена.
Snusmumriken
Приватные-публичные методы (замыкания), динамическое изменение объектов в процессе жизни, всякие перегрузки методов, наследования, в т.ч. множественные, по любому алгоритму поиска недостающих методов-значений, вплоть до детекта "кто вызывает и что ему ответить", и т.п.
Snusmumriken
Всё что напишешь - то и будет : )
bebebe
а вы какие объекты используете, table или closure based?
Snusmumriken
Я - из того примера который ты же скидывал, метатаблицы. Приватные методы не нужны. Конечно, юзер теоретически может всё испортить дёрнув какой-нибудь метод типа obj:__internal_method(...), но это его проблемы, пущай читает доки и делает "как надо".
Snusmumriken
Карочи, у ООП нет абсолютно чёткого определения, и реализации у каждого языка (или внутри отдельного языка) свои. Базовая функциональность под названием "создание новой коробочки", "присобачивание к ней данных и методов" - это то, что в данный момент человечество в подавляющем большинстве воспринимает под объектами. И это в луа вполне реализуется. Поэтому я пользуюсь "общечеловеческой" терминологией.
bebebe
вы видимо, сильный инженер
Snusmumriken
Ммм. Не особо, но это и не имеет значения. Просто ты или подстраиваешься под окружающих, или тебя никто не понимает.
Snusmumriken
Кстати, ты так и не рассказал, что ты воспринимаешь под ООП ))
bebebe
я думал что ООП - это парадигма программирования
Господин
это похоже на КОП
Господин
А оригинальная интерпретация ООП (smalltalk) - это огромная куча независимых акторов которые шлют друг другу сообщеньки, и принимающая сторона уже думает, как среагировать на это сообщение. Никаких тебе публичных методов, которые дёргают все кому не лень. Так что наши с тобой представления об ООП по умолчанию ошибочны, смоллтолк сказал что должно быть так - значит у всех должно быть так. И у С++ тоже нет никакого ООП. Так что тут - сплошная вкусовщина и отсутствует хоть какой-то смысл делать что-то сложнее чем коробочка с ручками-кнопочками.
Snusmumriken
Хммм. А что такое "парадигма объектно-ориентированного программирования"?
Lucky
Забейте.
Lucky
Идеализм прикольная штука. но чисто чтоб пофлудить.
Snusmumriken
я думал что ООП - это парадигма программирования
А то твой ответ похож на: - "А что такое сепулькарии?" - "Устройства для сепуления" - "А что такое сепуление?" - "Процесс, в котором участвуют сепулькарии"
bebebe
извините, я был не компетенте в этой беседе
Lucky
На практике - базар большой, походи, поищи ООП нужного тебе размера и фасона.
Snusmumriken
Список в студию!
Ilya
Список в студию!
Инкапсуляция, наследование, полиморфизм.
Snusmumriken
Итак. Инкапсуляция - через замыкания и метатаблицы. Наследования - через метатаблицы. Полиморфизм - через метатаблицы (перегрузку методов).
Snusmumriken
Это только один из способов, можно иначе.
vitaly
привет камарады и товарищи есть код который в модуле луа к нигинксу код следующий local cdn = {"cdn","c3","c3","c2","c1","c4"} local index = (tonumber(video_id) % 5) + 1 local scdn = cdn[index] замысел прост и понятен пытаемся разделить нагрузку на равные части в зависимости от целочисленного айди - было массив без последнего "c4" - добавил его и в коде поменял 5 на 6 - по идее должно все работать продолжить идеально - но на практике - стало выбитаться из массива 4 значения из 6 - вот сижу гадаю толи лыжи не едут - толи мистика какая в айдишках
vitaly
те почему остаток от деления так работает - может я чего не знаю или может строковый айди прилетает и оно его как то транслирует в число - по другому 😂
Snusmumriken
На отрицательность пофигу.
Snusmumriken
Проверил
Snusmumriken
На отрицательность делимого числа - пофигу.
vitaly
айдишники целочисленные
Snusmumriken
Хех, самое противное что я в своё время абсолютно так же балансировал микросервисы по куску айдишки (половина guid'а), и тоже со списком серверов. Но у меня там норм, даже распределение нормальное: на нескольких сотнях тысяч запросов - очень ровно по всем распределяется, хороший генератор.
Snusmumriken
Сложна
vitaly
нет - это что то монстроподобное
vitaly
у меня простой код в шаблоне - https://github.com/henix/slt2