groovy необязательное ключевое слово dsl - PullRequest
1 голос
/ 02 февраля 2020

Я работаю над DSL, используя groovy, и, поскольку я новичок в этом языке, я борюсь за что-то.

У меня есть этот код

def from(state1) {
        def closure
        closure = { sensor ->
            [becomes: { signal ->
                // someProcess;
                [and:  closure]
            }]
        }
        [to: { state2 ->
            // someProcess
            [when: closure]
        }]
    };

то, что я делаю, это для чтения такого рода сообщений

from "on" to "off" when "button" becomes "high" and "button2" becomes "high"

and "button2" becomes "high", необязательно. Грамматически, все работает так, как я хотел.

проблема в том, что я хотел добавить возможность обрабатывать or также, вот так:

from "on" to "off" when "button" becomes "high" or "button2" becomes "high"

но я не знаю, как это сделать. Как я могу сделать это, чтобы добавить это, а также возможность узнать, если and или or иметь контрольный оператор и другой процесс для каждого

, это был два дня, когда я нахожусь на проблема ..

спасибо :)

1 Ответ

1 голос
/ 03 февраля 2020

Во-первых, мне нравится ваш вопрос!

Не зная, что должен делать ваш //someProcess и каков весь сценарий использования (IoT-i sh?), Вы можно реализовать оператор or следующим образом:

...
    [to: { state2 ->
        [when: closure, whenEither:{ Map conds -> conds.any{ sensor, signal -> 'high' == signal } } ]
    }]

, тогда вы можете написать:

from "on" to "off" whenEither button:"high", button2:"high"
...