Topic: Полезные примеры кода и библиотеки

Так как по этой ветке форума разбросано некоторое количество полезных примеров кода и т.п., то было решено вытянуть их из форумных бездн и поместить сюда. Возможно кому-то да и пригодится.

Библиотеки/модули с полезными функциями:
Модуль "Шрифты"
Перечислитель с неповторяющейся случайной последовательностью
Функция, возвращающая кратчайший маршрут из одной комнаты в другую

Примеры кода:
Пример реализации мобильника с помощью модуля "theme"
Пример реализации виртуальной клавиатуры и проверки пароля (пароль: PASSWORD)

Еще клавиатура:
http://instead.syscall.ru/forum/viewtop … 194#p11194

Post's attachments

Attachment icon keyboard.zip 18.13 kb, 184 downloads since 2012-04-01 

Attachment icon phone.zip 394.68 kb, 206 downloads since 2012-04-01 

Re: Полезные примеры кода и библиотеки

В вики надо копипасту

Qui habet aures audiendi, audiat...

3 (edited by z-Hunter 2012-09-08 02:51:26)

Re: Полезные примеры кода и библиотеки

Может быть я открыл велосипед, но ссылки на полный объект работают как ссылки xact. То есть  можно создать объект

book = obj {...}

и где-то в какой-то функции в dsc написать:

p("Про это было написано в  {book|книге}");

При этом "книге" подсвечивается как ссылка, которая ведёт себя так, как если бы размещалась в book.dsc. То есть если её кликнуть, вызывается act объекта, если использовать на ней, то use/used и тд.

Re: Полезные примеры кода и библиотеки

xact это просто облегченный obj, правда с некоторыми доп функциями.

Re: Полезные примеры кода и библиотеки

Peter wrote:

xact это просто облегченный obj, правда с некоторыми доп функциями.

И это очень здорово на самом деле. Позволяет давать ссылки на любые объекты откуда угодно. Всё больше убеждаюсь, что INSTEAD рулит smile.

Re: Полезные примеры кода и библиотеки

А так же велики и коты... ну еще иногда пиво... А пчелы кстати фигня, если никто не знает. (;

Qui habet aures audiendi, audiat...

Re: Полезные примеры кода и библиотеки

В случае с паролем идет текстовый ввод, во втором случае он тоже текстовый.
Я пытаюсь реализовать ввод времени на будильнике. Там ввод только чисел и по маске, что немаловажно. Есть какие-то решения на этот случай?

Re: Полезные примеры кода и библиотеки

Предлагаю оператор множественного выбора с С-подобным синтаксисом ( switch, проще говоря wink  )

Исполнение

function switch (condition)                -- Оператор выбора для условия condition
    return function(data)                    -- data может иметь поле def: на случай недопустимых значений condition 
        if type(data) ~= "table" then
            error ("Switch data should be table. Got: " .. type(data));
        end    

        local react = data[condition] or data.def;
        local t = type( react );
        
        if t == "string" then
            p (react);
        elseif t == "function" then
            react();
        else
            error ("Check data fields! One of them is: " .. t .. ". Or \"def\" isn't define."); 
        end    
    end
end

Удобно применять, если есть длинный if-elseif-...-end, что зависит от одной переменной и возвращает текст.

Пример для переменной, пробегающей натуральный ряд чисел

key = obj{
    nam = "Ключ от киборга",
    dsc = nil,
    _state = 1;
    inv = function(s)
        switch(s._state){
            "Я подбираю странный вытянутый шестигранный брусочек с мизинец толщиной.";
            "Металл матовый, шероховатый на ощупь. Поверхность бурно испещрена причудливыми короткими бороздками. С одного краю бороздки складываются в спиральную линию, что придает ключу схожесть с болтом.";
            "Эй, а ведь он отлично подходит в тот разъем под челюстью киборга!";
            def = "Ключ для активации киборга Васи.";
        };
        s._state = s._state + 1;
    end,
};

В свич также можно передать таблицу вида [ключ]=значение.

switch(state){
    emphty   = "Медбот не подает признаков жизни.";
    off          = "Медбот сложился в аккуратный куб.";
    on          = "Медбот навел на меня свой диагноскоп.";
    def         = "Да это же медбот! Маркировка на корпусе: \"Коновал\", то значит в прошивку встроено ворчание и любовь организовывать очереди";
};

Значение может быть и функциями, но выигрыш в краткости потеряется.

9 (edited by z-Hunter 2014-02-02 18:05:13)

Re: Полезные примеры кода и библиотеки

MaJoR KolZ, спасибо, интересный пример использования замыкания:

 switch(state){ table }

вместо

  switch(state, table)    

никогда не думал что можно таким образом подать table внутрь функции.