Snusmumriken
Ну это того.. Наследованием? Объявляем абстрактный класс сущности, имеющей, допустим, координаты и размеры, ну, и заодно пустые методы update/draw, чтобы было. Пишем к нему метод move. Наследуем от него всё остальное!
Snusmumriken
Вот тебе пример проекта с такими сущностями: https://bitbucket.org/MainTomato/tank-o-box/src/61410a4ea6bf8bbd61c0a3b9bfdbbb2f585b100b/data/entity.lua?at=master&fileviewer=file-view-default Только без метода move, но он тут частично подразумевается через applyCollision : ) Тут же, кстати, неплохой сет моих либ.
Ivan
у тебя есть movable объект. Есть функция move которая принимает move(Movable, Destination)
Ivan
зачем наследование?
Ivan
не надо переусложнять)
Ivan
(пока не надо)
Ivan
но я тебя понял
Snusmumriken
Ну типа вызвать метод объекта проще, чем искать какую-то конкретную функцию. А если у тебя будет ещё пять объектов, которые можно будет двигать, но чуть по другому, допустим, им при движении нужно будет ещё что-то делать, шаги считать или двигать составные части? Что, делать пять разных функций: "moveObjFoo", "moveObjBar"?
Snusmumriken
Ну, ты вообще умничка : ) Ещё бы с мотивацией у тебя не было проблем, то было бы вообще зашибись. Мы оба забыли уточнить, что мы ещё и имеем доступ к родительскому методу, даже если определили свой. Больше возможностей, например, когда нам просто нужно сделать дополнительные действия, чтобы не копипастить туда-сюда функцию того же движения - в переопределённом методе предка - можно вызвать оригинальный метод предка и сделать ещё что-нибудь.
Snusmumriken
ООП с наследованием для чайников от Снусмумрика:
Snusmumriken
Ну, а в ООП - foo = {} foo.__index = foo function foo:new(x, y) local o = {x = x, y = y} return setmetatable(o, self) end bar = setmetatable({parent = foo}, {__index = foo}) bar.__index = bar function bar:new(x, y, w, h) local o = self.parent:new(x, y) o.w, o.h = w, h return setmetatable(o, self) end foobar = setmetatable({parent = bar}, {__index = bar}) foobar.__index = foobar function foobar:new(x, y, w, h, z, v) local o = self.parent:new(x, y, w, h) o.z, o.v = z, v return setmetatable(o, self) end
Snusmumriken
Проследи, что вызывается в функции o = self.parent:new(x, y, w, h, z, v) Там дёргаются функции new начиная от foo:new до foobar:new. Можешь обозвать не parent а super. Это более питоноподобно и типа "традиционное" название батьки, а ля "суперкласс".
Snusmumriken
Методы и ключи у потомков вызываются по мере поиска. Нашли в объекте? Вызвали или выдали. Не нашли? Поискали у класса. Нашли? Выдали. Нет? Поискали у суперкласса. И т.д, дальше сам разберёшься, тут всё по изичу.
Snusmumriken
Ну, в результате удобно делать интерфейсы. Допустим, прописали функцию draw и у суперкласса и у дочернего класса. Объекты суперкласса будут пользоваться методом draw суперкласса, а дочернего - дочернего. Таким образом, можно не париться с виртуальными классами, а хуярить сразу реальные. Если внезапно нужен перезаписанный метод суперкласса - можно вызывать как self.parent.method(self, a, b, c). Родитель родителя, соответственно, self.parent.parent. Просто как три копейки, давай осваивай )))
Ivan
Спасибо
MrSmith
Ребят, интерпритатор lua подскажите топовый
MrSmith
luajit,
MrSmith
?
Snusmumriken
Ну ясен хрен. P.S. Сообщения можно редактировать.
MrSmith
Ребят, можно писать чисто на луа? Есть пакетники?
Snusmumriken
Luarocks. Можно писать чисто на lua, но если тебе нужно что-то специфические (функции ядра, например) - пишешь header и гоняешь любую сишную библиотеку напрямую. Как альтернатива - ставишь dynasm и катаешь на ассемблере на lua. https://luapower.com/dynasm Эти фичи как раз предоставляет luajit.
Snusmumriken
Ой, как будто писать на асме - это так странно ))))
Snusmumriken
Очень просто, была бы документация к ним. По документации пишется header, и всё, вот тебе ffi.C.foobar.
MrSmith
Я руками все писал когда в клон хса встраивал интерпритатор
Snusmumriken
Ты про ffi, ты прав. И кстати, если есть исходники сишной библиотеки - хедер можно выдрать в полуавтоматическом режиме.
Dika
интерпрЕтатор
Snusmumriken
Интерпритатор, от слова "прикольная *штука*!" )) Корень - "при", остальное - приставки, суффиксы и окончания.
bebebe
дратутите, а есть тут господа которые вебсокеты на openresty терминировали?
Dika
@Snusmumriken
Snusmumriken
Вебсокеты не лазал (( Только обычные сокеты.
bebebe
Roman
Я с удовольствием в вебсокеты лазал! С рестями - одно удовольствие! Какие вопросы?
Roman
около года голову ломал с ними, потом нашел патч: https://github.com/slact/ngx_lua_ipc патч от создателя nchan - значит, очень умный человек писал, на деле оно действительно работает это вместо редиса и прочих mq - позволяет воркерам внутри nginx передавать друг другу сообщения, то что надо для ws
bebebe
Я с удовольствием в вебсокеты лазал! С рестями - одно удовольствие! Какие вопросы?
благодравствую белый господин а вот сюда не смотрели? https://github.com/openresty/lua-resty-websocket
bebebe
т.к. у меня собрано все в рамках RnD (гавно и палки), я сделал так, что на запрос запускается бинарничек и результат отдается в сокет (бираник поприетарный от яндекса, расколупать его нельзя) делаю это через sockexec, типа в контейнере с openresty слушает sockexec демон, который через unixsocket получает запросы на запуск программ, запускает и отдает результат при этом воркер не зависает, т.к. поллит unix socket на ответ асинхронно
bebebe
если мамка узнает - по заднице надает, да
bebebe
сейчас у меня есть rest api для все этого дела я хочу перевести с rest api на вебсокеты, и пока теорезирую, как лучше сделать и что использовать\
bebebe
от бинарника и sockexec я к сожалению вближайшее время отказаться не могу
bebebe
Рома я тогда чуток попозже вас помучаю, если буду концептуально не понимать
Roman
Я холю-лелею тестовый экспериментальный фреймворк рести, там вебсокеты и прочее, суть сказанного про socketexec и мамку уловить не просто, могу ссылки на вебсокетный код скинуть
mva
а чего бы тебе его просто на гх не запилить? :)
Roman
bebebe, во избежание флуда можешь в личку
bebebe
я на всякий случай поясню, как это у меня работает, что бы вы понимали что за гавно и палки запускается docker container в нем запускается демон sockexec https://github.com/jprjr/lua-resty-exec который слушает /tmp/sockexec.sock (unix socket) запускается openresty к openresty приходит клиент на /endpoint с запросом я пишу в этот сокет (/tmp/sockexec) shell команду типа echo запрос_пользователя | yandex_program жду асинхронно её окончания (не блоча воркер) программа возвращает результат, я запихиваю её в сокет клиенту
bebebe
теперь я этот механизм хочу перевести на вебсокеты, вот и весь сказ
Roman
Оки, так какие проблемы с openresty/lua-resty-websocket?
Roman
1) подключить юзера через ws 2) принять запрос 2) запустить shell 3) результат запостить обратно юзеру через его соединение
Roman
наверное, дело в том, что запустить shell команду и отправить ответ пользователю надо в отдельном треде, ngx.thread.spawn который, звучит просто
bebebe
go
bebebe
тебе же пишут go
Ivan
JavaScript
Ivan
C++ для браузера
bebebe
JavaScript
этого не слушай
Ivan
Работы много
bebebe
да вы что наркоманы чтоле?
Ivan
Ну он не адекватен, я согласен
Alex
+1 за питон
bebebe
go
bebebe
не животе прошлым
bebebe
https://habrahabr.ru/post/274099/
Ivan
Ахаха, не факт что примут
Ivan
Точнее сто пудов не примут
Ivan
Дома объясню
Ivan
И да, я ебал так писать
bebebe
Уасилий впал в рейдж
bebebe
опасно
Snusmumriken
Чувак, ты опять фигнёй страдаешь? : (
Snusmumriken
Твой рейдж-мод тут никому не нужен, чувак-Чувак ((
Ivan
Да. Лучше оба
Ivan
А лучше знать все языки
Пх'нглуи мглв наф'х Ктулху Р'льех вгхнагл ф'хтагн.
Ещё Brainfuck и Whitespace можно изучить.
Ivan
Я имел ввиду lisp или c#
Anonymous
Rust
Tverd
В расте не меньше всяких приколюшек чем в С++
Roman
haskell уже советовали?
Roman
забавно каждый раз наблюдать языковой срач где без разбора компилируемые, скриптовые, системные, вообще самые разные, если все равно что за язык и для чего он - тогда haskell, он проверенный временем труЪ
Serge
А никто не заставляет использовать весь функционал С++. Как сказал создатель С++ Б.Страуструп, для того, чтобы писать хорошие программы на С++ не обязательно знать о С++ всё.
Roman
торч по-моему живое доказательство, что очень даже все серъезно