Понимание оператора матча - PullRequest
1 голос
/ 21 марта 2019

Привет, я запутался в использовании оператора матча. Я наткнулся на фрагмент кода, который не похож на объяснение в документации: https://docs.mulesoft.com/mule-runtime/3.9/dataweave-operators#match

%function testMatch(key)
    (key match {
        x when x is :null -> false,
        x when x == "A" -> true, 
        x when x == "B" -> false, 
        x when x == "J" -> true, 
        x when x == "K" -> false, 
        x when x == "L" -> true, 
        default -> false
    })

Пожалуйста, помогите понять значение этого синтаксиса для совпадения

1 Ответ

2 голосов
/ 21 марта 2019

Отличный вопрос! Ключевое слово match служит двум целям в DataWeave и зависит от его размещения. Соответствие используется либо для регулярных выражений, либо для сопоставления с образцом.


match для регулярных выражений

Если match имеет строку в левой части (lhs) и регулярное выражение в правой части, оно будет работать в соответствии со следующими документами . По сути, он выполняет сопоставление с регулярным выражением:

Match возвращает массив, который содержит все совпадающее выражение, за которым следуют все группы захвата, соответствующие указанному регулярному выражению.


match для сопоставления с образцом

Если у match есть что-либо, что оценивает значение (то есть, не оценивает функцию) в lhs, и открытую скобку в rhs, match теперь выполняет сопоставление с образцом. Вы можете найти эти документы для этого здесь . Я довольно подробно об этом рассказываю в своем выступлении, здесь вы можете найти слайды для этого .

Для приведенного вами примера (хорошее форматирование, кстати):

%function testMatch(key)
    (key match {
        x when x is :null -> false,
        x when x == "A" -> true, 
        x when x == "B" -> false, 
        x when x == "J" -> true, 
        x when x == "K" -> false, 
        x when x == "L" -> true, 
        default -> false
    })

match проверяет, является ли его ввод, x, null, A, B, J, K или L. Если он совпадает с любым из них, DW оценит то, что находится на правой стороне стрелки, и вернись немедленно. Если ничего не совпадает, он вернет то, что находится на правой стороне стрелки для default.

...