Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
syberuser
0 / 0 / 1
Регистрация: 06.12.2012
Сообщений: 30
#1

Правильный вызов функции из таблицы - Lua

14.07.2016, 11:27. Просмотров 957. Ответов 0
Метки нет (Все метки)

Добрый день, может немного не в тему, но по-моему вопрос ближе к языку программирования
преамбула
Есть программа imapfilter. Служит для сортировки почты. Сортировка описывается на LUA. Есть готовые функции для сортировки по критериям, я же хочу описать иную логику.
Не вдаваясь в подробности imapfilter, командой results=myacc.INBOX:select_all(), получаю таблицу results, следующего содержания:
Код
for key, value in pairs(results) do
     print (key, value)
end

2 messages, 0 recent, 2 unseen, in ххх@imap.mail.ru/INBOX.   -- это выхлоп imapfilter. говорит что у меня есть 2 письма во входящих. далее - содержимое таблицы results

1	table: 0x1f72b60
2	table: 0x1f79e40
is_smaller	function: 0x1f32bb0
remove_flags	function: 0x1f2bad0
match_message	function: 0x1f4bde0
is_undraft	function: 0x1f48f00
_intersection	function: 0x1f52f90
is_older	function: 0x1f41130
_type	set
match_header	function: 0x1f4b790
contain_header	function: 0x1f48050
match_bcc	function: 0x1f49500
contain_from	function: 0x1f46080
is_unflagged	function: 0x1f3ef10
add_flags	function: 0x1f415b0
_union	function: 0x1f2b820
mark_draft	function: 0x1f35c10
contain_subject	function: 0x1f470d0
sent_on	function: 0x1f43c00
arrived_before	function: 0x1f41a90
mark_flagged	function: 0x1f35b80
contain_to	function: 0x1f47840
unmark_answered	function: 0x1f48d20
contain_field	function: 0x1f45e30
copy_messages	function: 0x1f45be0
unmark_seen	function: 0x1f4a250
send_query	function: 0x1f37580
sent_since	function: 0x1f44330
match_from	function: 0x1f4a6a0
match_field	function: 0x1f4ae80
arrived_on	function: 0x1f40c80
sent_before	function: 0x1f43b70
is_draft	function: 0x1f4d600
_difference	function: 0x1f3e670
is_flagged	function: 0x1f4c180
is_newer	function: 0x1f411c0
match_subject	function: 0x1f4a610
mark_deleted	function: 0x1f38520
_mt	table: 0x1f79610
has_flag	function: 0x1f45ec0
is_larger	function: 0x1f3f340
contain_message	function: 0x1f4a490
is_unanswered	function: 0x1f3cd60
contain_bcc	function: 0x1f46890
mark_answered	function: 0x1f38490
select_all	function: 0x1f2b570
contain_body	function: 0x1f48c30
replace_flags	function: 0x1f38280
_new	function: 0x1f3c150
is_recent	function: 0x1f49c20
unmark_deleted	function: 0x1f2e920
is_unseen	function: 0x1f34ba0
is_undeleted	function: 0x1f48e70
arrived_since	function: 0x1f432a0
mark_seen	function: 0x1f41250
contain_cc	function: 0x1f46800
is_answered	function: 0x1f4d690
match_to	function: 0x1f4ad50
match_body	function: 0x1f4b700
match_cc	function: 0x1f49e40
unmark_flagged	function: 0x1f4a1c0
delete_messages	function: 0x1f458e0
unmark_draft	function: 0x1f48af0
is_new	function: 0x1f4c410
is_seen	function: 0x1f49220
is_old	function: 0x1f425d0
is_deleted	function: 0x1f4c380
move_messages	function: 0x1f45c70
где первые 2 строки - это представление 2-х писем в ящике, остальное, как я понимаю - функции для их обработки.
Дальше предполагается отбор из таблицы results по вхождению в теме, отправителе и тд. и затем непосредственное действие, перемещение, копирование, удаление и тд
Действие вызвается следующим образом:
Код
results:move_messages(account_name.test)
этот код переместит все письма, в данном случае 2, в папку test

теперь суть вопроса:
пусть писем будет 6, и мне надо перенести первые 2
насколько я понял конструкция results:move_messages(account_name.test) вызывает функцию move_messages(results), т.е. от всех записей в таблице (или элементов массива, как здесь будет правильнее?) имеющих числовой индекс (1,2,3...6)
можно ли передать параметром не всю таблицу results а ее, допустим, первый элемент results[1]?
я это вижу как-то вроде results.move_messages(results[1], account_name.test) но оно так не работает, пишет table index is nil. и мне кажется, что это потому, что я не правильно понимаю построение вызова функции (т.е. путаюсь в синтаксисе) ведь как-то оба параметра (и значения таблицы и папка назначения) передаются функции.

научите, пожалуйста, как построить вызов правильно

Добавлено через 28 минут
вопрос снят, видимо нужно больше спать

конструкция results.move_messages(results[1], account_name.test) правильная, а ошибка полностью выглядела так:
Код
imapfilter: /usr/share/imapfilter/common.lua:41: table index is nil
в свою очередь в файле common.lua есть функция, извлекающая элементы из таблицы
Код
function _extract_mailboxes(messages)
    local t = {}
    for _, v in ipairs(messages) do
        b, _ = table.unpack(v)
        t[b] = true
    end
    return t
end
и когда я их заранее извлек указав первый элемент таблицы results[1] - извлекать стало уже некого

обошел временной таблицей r1={results[1]}
results.move_messages(r1, account_name.test)

все работает.
всем спасибо ...................... =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2016, 11:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Правильный вызов функции из таблицы (Lua):

Вызов lua функции в C++
Здрасте! Как вызвать функцию, написанную в луа скрипте? (lua 5.2) Всё уже...

Вызов функции из значения поля таблицы БД
Добрый день. Нужна помощь экспертов. У меня в модуле (V_KONH_VKS) есть...

Вызов функции при клике на ячейку таблицы
Есть таблица. Требуется каждой ячейке (td) установить вызов одной функции, но с...

Правильный вызов метода
class Dict{ public List<Word> words; public Dict(){ ...

Правильный вызов потока
Доброго времени суток. Ребята подскажите! Создал поток. Вроде все должно...

Правильный асинхронный вызов
Здравствуйте. Есть json файл, который нужно асинхронно парсить при вызове...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2016, 11:27
Привет! Вот еще темы с решениями:

Правильный вызов конструкторов родителей с параметрами
Всем привет. Кто подскажет как правильно вызвать конструкторы родителей с...

Как организовать правильный выбор данных из таблицы?
Здравствуйте господа программисты :-) Имеется сложность с выбором данных из...

Правильный цикл для вывод данных из таблицы
Добрый день, написал код для вывода данных из бд, но засомневался нужен ли тут...

Как написать правильный запрос для большой таблицы
есть 2 таблицы: 1) itemid, name 2) statusid, itemid, date, somevalue ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru