Dima
подскажите как вызывать методы из собственной таблицы return { a = function() ... end, b = funtion() -- how to call? end }
Dima
Через self
спасибо
🐅🤦‍♂️
подскажите как вызывать методы из собственной таблицы return { a = function() ... end, b = funtion() -- how to call? end }
function newBunchOfFunctions() return { a = function() ... end, b = funtion() -- how to call? end } end local t = newBunchOfFunctions() t.a()
🐅🤦‍♂️
А, не прочитал, что из собственной таблицы, да)
Yuriy
Описать сначала функции
Yuriy
сделать все что надо и потом только делат return
Yuriy
local a = function() local b = function() a() end return { a = a, b = b }
Yuriy
кстати так код получается чище
Dima
Через self
что то не этапе создания таблицы self у меня не стработал
Dima
return { split = function (str) words = {} for word in str:gmatch("%w+") do table.insert(words, word) end return words end, reverse_words = function(str) local reverse = function(arr) local i, j = 1, #arr while i < j do arr[i], arr[j] = arr[j], arr[i] i = i + 1 j = j - 1 end end words = {} w = self.split(str) for word in str:gmatch("%w+") do table.insert(words, word) end return 'world! hello' end }
Dima
хочтеся описать объект в скобочках
Dima
но навено придётся выхоит за рамки
Pavel
Self это сахар. Чтобы работало - первым аргументом в вызов нужно передать саму таблицу
Dima
в JS есть билиотека _lodash где собраны разные ходовые методы.
Dima
а есть ли такое для Lua
Pavel
local Obj = {} function Obj.spam(self) print(self) end function Obj:spam2() print(self) end Obj:spam() -- эквивалентно Obj['spam'](Obj), т.е. не просто вызов метода, а сначала получение поля по имени, а затем его вызов, как функции. Obj:spam2() Obj.spam(Obj)
Dima
где пачка всяких join, split, range и прочего
Pavel
Хз. Как оьшепринятого стандарта - нет. Да и стараются обычно не тянуть то что не нужно
Dima
не удобство.
mva
ясно другая иделогия языка. Основное скорость.
основное - "минимально необходимый набор инструментов чтобы ты мог сделать то, что тебе нужно"
Dima
нет такогой библиотеки где все прописано
Dima
lua rocks там наверно надо шукать.
🐅🤦‍♂️
в JS есть билиотека _lodash где собраны разные ходовые методы.
Js не знаю, но может что-то типа такой либы?
🐅🤦‍♂️
https://github.com/Yonaba/Moses
🐅🤦‍♂️
смотреть надо на github
🐅🤦‍♂️
спасибо
Кстати, запрос в гугл на "lua lodash" находит вот это https://github.com/axmat/lodash.lua
Serezha
Кто у нас синтезом музыки интересовался - наконец адекватный вариант без хайпового лернинга 🙂 https://habr.com/ru/company/lanit/blog/455742/
Dima
https://gist.github.com/lbvf50mobile/61717cfcb9e6d7ce906ad36bd422d1a8#file-solution-lua-L33 Подсобите с рефакторингом. Покажите как решить красиво.
fgntfg
define красиво
Dima
define красиво
можно чуть по подробней.
Dima
пойду про define в Lua гуглить.
Dima
что-то ничего не нагуглил.
Саша
хыхы
fgntfg
Что ты имеешь ввиду под "красиво"?
Dima
Что ты имеешь ввиду под "красиво"?
пример: function reverse_words(words){ var array = words.split(' '); array.reverse(); return array.join(' '); }
Dima
можно писать так
Dima
на JS
Dima
а можно так let reverse_words = x => x.split` `.reverse().join` `;
Dima
красиво это приёмы писание кода.
Саша
но это не красивее
Dima
которые новечки не знают. И им нужен совет.
Dima
большое спасибо. То что нужно.
Dima
Что за редактор?
Snusmumriken
Что за редактор?
Notepad++ https://pastebin.com/w1RQj5QQ
Dima
я исользую VSC
Dima
ясно у меня он тоже стоит.
Dima
правда я его давно не обновлял.
Dima
в основном на нём редактирую PATH когда надо добваить что-то. Крайний раз добавлял Lua Love
Snusmumriken
Ну в общем, твоя изначальная версия реверсера слов как-то слишком много тащит. Всё то же самое можно одной специализированной функцией.
Dima
Snusmumriken
Ну вместо table.concat(t, ' ') можно накатать local s = '' for i = 1, #t - 1 do s = s .. t[i] .. ' ' end s = s .. t[#t] Вот эта вот загогулина в конце — чтобы не было лишнего хвоста в виде разделителя. И на больших таблицах это медленно в отличии от concat.
Dima
на написание кода.
Snusmumriken
Читани эту фигню: https://www.lua.org/pil/11.6.html Да, предупреждаю что на "небольшом" количестве склеиваний строк, ".." гораздо быстрее чем создание таблички, напихивание в неё всякой фигни и последующая конкатенация. Но на БОЛЬШОМ количестве — concat гораздо круче, особенно по памяти. Ибо сишная функция и не плодит лишних операций разметки памяти. Табличка становится стрингбуфером.
fgntfg
Хмм. А можно пихать в "начало" таблицы.
Snusmumriken
Хмм. А можно пихать в "начало" таблицы.
Покажи подробнее, я не понял
Snusmumriken
А, уже понял
Snusmumriken
Можно пихать в начало через table.insert(tbl, 1, v), но оно приведёт к огромной куче лишних сдвигов.
Dima
к слову о редаткорах.
fgntfg
Покажи подробнее, я не понял
Сначала в 0, потом в -1. Или сначала посчитать слова, а потом писать начиная с nword
Dima
Dima
удобно в VSC 1. работа с *.md 2. Встроенный terminal
Snusmumriken
Скорости работы в условии нибыло
Да, так можно но это может быть очень неэффективно. С подсчётом слов та же фигня, придётся два раза пробегать одними и теми же регулярками по строке. И тоже можно. И тоже не так эффективно.
Dima
Это Notepad++?
Snusmumriken
Ага. С плагином MarkdownViewer++
Dima
класс