Size: a a a

2020 January 26

VV

V V in pro.lua
Шмель Тяжеловес
https://github.com/kikito/inspect.lua/
Я обычно ее использую для отладки, что-бы целиком выводить таблички, которые простой принт не показывает.
local inspect = require "inspect"
local t = { 1, 2, 3, q = { "hello" } }
print(inspect(t))
А функции/потоки/userdata она выводит?
источник

S

Snusmumriken in pro.lua
V V
А функции/потоки/userdata она выводит?
Содержимое этих типов — нет.

Луа не может просто так, без костылей взять, и преобразовать функцию обратно в строку. Можно в байткод, но не в текст. Вместо значения, будет отображаться что-то типа function 0x12345
Юзердата — на то и юзердата, это сишный тип. Сишка не умеет в интроспекцию. Будет отображено userdata 0x12345 или cdata 0x12345.
Потоки в луа, то есть корутины, это почти те же функции, соответственно, будет отображено то, как был создан "поток": если через coroutine.createthread 0x12345, если coroutine.wrap —  function 0x12345, потому что wrap - это функция обёрнутая вокруг корутины. Если у объекта или юзердаты есть метод tostring — оно будет вызвано либой inspect, но это можно убрать.

Но вывод таблиц — запросто, и это очень удобно для начинающих и не только.
источник

S

Snusmumriken in pro.lua
А с интроспекцией в сишке - проблема в том, что когда программа скомпилирована, все имена переменных, типов, поля структур - превращаются просто в коды смещений. В результате, сишка не знает никаких имён, не может просто так итерировать по полям уже собранной структуры и т.д. Есть компиляторы которые заставляют хранить в бинарнике дополнительную информацию, но это используется только для отладки, и нуждается в доработке для почти каждого случая. Или можно использовать специальные типы данных, вроде key-value
источник

VV

V V in pro.lua
Snusmumriken
Содержимое этих типов — нет.

Луа не может просто так, без костылей взять, и преобразовать функцию обратно в строку. Можно в байткод, но не в текст. Вместо значения, будет отображаться что-то типа function 0x12345
Юзердата — на то и юзердата, это сишный тип. Сишка не умеет в интроспекцию. Будет отображено userdata 0x12345 или cdata 0x12345.
Потоки в луа, то есть корутины, это почти те же функции, соответственно, будет отображено то, как был создан "поток": если через coroutine.createthread 0x12345, если coroutine.wrap —  function 0x12345, потому что wrap - это функция обёрнутая вокруг корутины. Если у объекта или юзердаты есть метод tostring — оно будет вызвано либой inspect, но это можно убрать.

Но вывод таблиц — запросто, и это очень удобно для начинающих и не только.
Тогда весьма интересная библиотека отладки, спасибо)
источник

VV

V V in pro.lua
Snusmumriken
А с интроспекцией в сишке - проблема в том, что когда программа скомпилирована, все имена переменных, типов, поля структур - превращаются просто в коды смещений. В результате, сишка не знает никаких имён, не может просто так итерировать по полям уже собранной структуры и т.д. Есть компиляторы которые заставляют хранить в бинарнике дополнительную информацию, но это используется только для отладки, и нуждается в доработке для почти каждого случая. Или можно использовать специальные типы данных, вроде key-value
Вопрос скорее не в том, чтобы вывести оригинальные имена. Таблицы в луа тоже анонимны. Но некоторые библиотеки такого вложенного вывода падают, если на вход подать что-то отличное от числа, строки или таблицы
источник

S

Snusmumriken in pro.lua
Инспект умеет выводить даже зацикленные таблицы, так что всё ок.
источник

VV

V V in pro.lua
👍
источник

VV

V V in pro.lua
Оффтоп - а кто-то использует в разработке опору на принципы ооп? Если да, то какие? Если все, то какие - наиболее часто?
источник

m

mihacooper in pro.lua
V V
Оффтоп - а кто-то использует в разработке опору на принципы ооп? Если да, то какие? Если все, то какие - наиболее часто?
Именно в контексте Lua вопрос?
источник

m

mihacooper in pro.lua
Мне кажется, что заиспользовав объектную абстракцию (условные классы), ты по инерции начинаешь выстраивать каноническую ООП структуру. Единственное "но", что в динамически типизируемых языках это ООП довольно условное.
источник

S

Snusmumriken in pro.lua
Да пофигу. Если какой-то модуль не укладывается в простую функцию, и эффективнее хранить данные вместе с операциями над ними — мутится ООП, дерево абстракций (глубиной 3-5) и прочая муть.
Если не хочется ООП — можно сбацать миксины или что-то такое.
источник

VV

V V in pro.lua
Без привязки к lua - просто с одной стороны, обычный синтаксический сахар таблиц позволяет реализовать что-то способом, похожим на методы ООП.
С другой ооп - это же инкапсуляция, наследование и полиморфизм + дофига менее строгих условий, вроде private, public и protected методов.
источник

VV

V V in pro.lua
Вот и интересно, на луа что из каноничного ооп люди используют на практике, а что - академический рудимент, не имеющий применения.
источник

LO

Lucky Ook in pro.lua
V V
Без привязки к lua - просто с одной стороны, обычный синтаксический сахар таблиц позволяет реализовать что-то способом, похожим на методы ООП.
С другой ооп - это же инкапсуляция, наследование и полиморфизм + дофига менее строгих условий, вроде private, public и protected методов.
нее, оно прикольно, но это же кукушечкой поехать можно отлаживая такое.
источник

S

Snusmumriken in pro.lua
V V
Вот и интересно, на луа что из каноничного ооп люди используют на практике, а что - академический рудимент, не имеющий применения.
> бюрократический рудимент
Поправил : )
источник

S

Snusmumriken in pro.lua
Бюрократические рудименты используются там, где важна бюрократия, то есть в интырпрайзе и прочем мегапафосном софте.
В норме — инкапсуляция работает через соглашение между джентльменами, и чтение документации.
источник

m

mihacooper in pro.lua
V V
Без привязки к lua - просто с одной стороны, обычный синтаксический сахар таблиц позволяет реализовать что-то способом, похожим на методы ООП.
С другой ооп - это же инкапсуляция, наследование и полиморфизм + дофига менее строгих условий, вроде private, public и protected методов.
private и public - это не инкапсуляция. Этом способ ее реализации. Так-то, если ты засунешь поля в метатаблицу или как в питоне сделаешь __field -  это тоже будет инкапсуляция
источник

VV

V V in pro.lua
О том и речь) кто какие способы реализации использует.

Кому-то private нужен? Если да, то как используете? Protected? Тот же вопрос)

Например, наследование кому-то хоть раз в луа пригодилось? Или, может, потребовалось настолько, что вы сами вручную его реализовывали?
источник

VV

V V in pro.lua
Snusmumriken
Бюрократические рудименты используются там, где важна бюрократия, то есть в интырпрайзе и прочем мегапафосном софте.
В норме — инкапсуляция работает через соглашение между джентльменами, и чтение документации.
Джентельменов может быть больше трех десятков))

Энтерпрайзнвй софт - тоже софт)
источник

m

mihacooper in pro.lua
V V
О том и речь) кто какие способы реализации использует.

Кому-то private нужен? Если да, то как используете? Protected? Тот же вопрос)

Например, наследование кому-то хоть раз в луа пригодилось? Или, может, потребовалось настолько, что вы сами вручную его реализовывали?
Я наследование использую в lua
источник