Как деструктурировать / сопоставить тип json в Ballerina? - PullRequest
1 голос
/ 28 мая 2019

Чтобы вернуть значение по умолчанию json в случае ошибки, я написал следующую функцию, в которой я пытаюсь использовать оператор сопоставления типа json|error в балерине 0.991.0

Это:

function jsonIt(json|error myJson)returns json{
    match myJson {
        var error(detail,message) => return {};            
        _ => return {};
    }
}

Компилирует (игнорируйте проглоченную ошибку ради аргумента), но, очевидно, не возвращает значение json.

Это:

function jsonIt(json|error myJson)returns json{
    match myJson {
        json j  => return j;
        var error(detail,reason) => return {};
    }
}

Не компилируется => extraneous input 'json'

По сути, я не могу найти никакого способа сопоставления с возможным типом json. Я пробовал:

json mj=> return mj;

var mj => return mj; //doesn't limit type to json

и несколько других. По сути, я не могу найти способ сопоставить типу json или деструктурировать его, как error(d,m)

Хотя этот вопрос стоит сам по себе, предложение более идиоматического способа достижения этого также будет оценено.

1 Ответ

1 голос
/ 29 мая 2019

Основываясь на описании вашей проблемы, я думаю, что вы пытаетесь сделать здесь переключение типов.т.е. проверка, принадлежит ли значение определенному типу.Для этого варианта использования вы можете использовать тестовое выражение типа в Ballerina.Следующие два подхода должны работать.

function jsonIt(json | error myJson) returns json {
    if (myJson is json) {
       return myJson;
    } else {
       return {};
    }
}

С троичным оператором

function jsonIt(json | error myJson) returns json {
    return (myJson is json) ? myJson :{};
}

Оператор match выполняет переключение значений.т.е. выберите блок для выполнения на основе шаблона, которому соответствует значение

...