Dima
подскажите как вызывать методы из собственной таблицы
return {
a = function()
...
end,
b = funtion()
-- how to call?
end
}
Pavel
Dima
🐅🤦♂️
А, не прочитал, что из собственной таблицы, да)
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
хочтеся описать объект в скобочках
Dima
но навено придётся выхоит за рамки
Pavel
Self это сахар. Чтобы работало - первым аргументом в вызов нужно передать саму таблицу
Dima
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
Dima
не удобство.
Dima
Dima
нет такогой библиотеки где все прописано
Dima
lua rocks там наверно надо шукать.
🐅🤦♂️
🐅🤦♂️
https://github.com/Yonaba/Moses
🐅🤦♂️
смотреть надо на github
Dima
🐅🤦♂️
спасибо
Кстати, запрос в гугл на "lua lodash" находит вот это https://github.com/axmat/lodash.lua
Dima
Serezha
Кто у нас синтезом музыки интересовался - наконец адекватный вариант без хайпового лернинга 🙂 https://habr.com/ru/company/lanit/blog/455742/
Dima
https://gist.github.com/lbvf50mobile/61717cfcb9e6d7ce906ad36bd422d1a8#file-solution-lua-L33
Подсобите с рефакторингом. Покажите как решить красиво.
fgntfg
define красиво
Dima
пойду про define в Lua гуглить.
Dima
что-то ничего не нагуглил.
Саша
хыхы
fgntfg
Что ты имеешь ввиду под "красиво"?
Dima
можно писать так
Dima
на JS
Dima
а можно так
let reverse_words = x => x.split` `.reverse().join` `;
Dima
красиво это приёмы писание кода.
Саша
но это не красивее
Dima
которые новечки не знают. И им нужен совет.
Snusmumriken
Dima
большое спасибо. То что нужно.
Dima
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
Dima
на написание кода.
Snusmumriken
Читани эту фигню:
https://www.lua.org/pil/11.6.html
Да, предупреждаю что на "небольшом" количестве склеиваний строк, ".." гораздо быстрее чем создание таблички, напихивание в неё всякой фигни и последующая конкатенация. Но на БОЛЬШОМ количестве — concat гораздо круче, особенно по памяти. Ибо сишная функция и не плодит лишних операций разметки памяти. Табличка становится стрингбуфером.
Dima
fgntfg
Хмм. А можно пихать в "начало" таблицы.
Snusmumriken
Snusmumriken
А, уже понял
Snusmumriken
Можно пихать в начало через table.insert(tbl, 1, v), но оно приведёт к огромной куче лишних сдвигов.
Dima
к слову о редаткорах.
Dima
fgntfg
Dima
удобно в VSC
1. работа с *.md
2. Встроенный terminal
Snusmumriken
Скорости работы в условии нибыло
Да, так можно но это может быть очень неэффективно.
С подсчётом слов та же фигня, придётся два раза пробегать одними и теми же регулярками по строке. И тоже можно. И тоже не так эффективно.
fgntfg
Dima
Snusmumriken
Dima
Snusmumriken
Ага. С плагином MarkdownViewer++
Dima
класс
🐅🤦♂️