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
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
Господин
ооп в луа вообще норм юзать,или это не тот язык?
Anonymous
mva
mva
Тру/фолс
перечитай мой вопрос ещё раз, пожалуйста
Anonymous
Господин
кто то юзает у себя? либа или сами?
Snusmumriken
Господин
я читал это. мне интересно не как это сделать, а кто это делает у себя
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
mva
Snusmumriken
Имхо, ООП в луа слишком просто пишется, чтобы делать отдельные библиотеки, мутить лишние файлы в проекте, подключать эту ерунду и всякое такое.
Так-то у луа пишется почти как в питоне, правда, без всяких интерфейсов-декораторов. И нужно совершить пару "слегка непонятных действий" вроде class.__index = class и переопределить self через setmetatable.
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
Идеализм прикольная штука. но чисто чтоб пофлудить.
bebebe
извините, я был не компетенте в этой беседе
Lucky
На практике - базар большой, походи, поищи ООП нужного тебе размера и фасона.
Snusmumriken
Список в студию!
Ilya
Lucky
Snusmumriken
Итак.
Инкапсуляция - через замыкания и метатаблицы.
Наследования - через метатаблицы.
Полиморфизм - через метатаблицы (перегрузку методов).
Snusmumriken
Это только один из способов, можно иначе.
Mikhail
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'а), и тоже со списком серверов.
Но у меня там норм, даже распределение нормальное: на нескольких сотнях тысяч запросов - очень ровно по всем распределяется, хороший генератор.
bebebe
Snusmumriken
Сложна
vitaly
нет - это что то монстроподобное
vitaly
у меня простой код в шаблоне - https://github.com/henix/slt2