Объединение двух карт с использованием оператора распространения дает ошибку в балерине

Я попытался объединить две карты с помощью оператора распространения, и это выдало ошибку.

      import ballerina/io;

map<string> map1 = {
    "key1": "value1"
};

map<string> map2 = {
    "key2": "value2"
};

public function main() {
    map<string> map3 = {...map1, ...map2};
    io:println(map3);
}

Сообщение об ошибке:invalid usage of mapping constructor expression: multiple spread fields of inclusive mapping types are not allowed

Что я здесь делаю не так?

1 ответ

Это запрещено, поскольку в обоих сопоставлениях может быть указано одно и то же поле. По сути, мы не можем использовать поле распространения более чем с одним открытым сопоставлением. Даже если один из них открыт, он должен иметь никогда не вводимые дополнительные поля https://ballerina.io/learn/by-example/never-type/ для всех полей, которые могут быть указаны через другие поля распространения, чтобы гарантировать дубликатов не будет.

Например, будет работать следующее.

      import ballerina/io;

record {| 
    string key1;
|} map1 = {
    key1: "value1"
};

record {|
    never key1?;
    string...;
|} map2 = {
    "key2": "value2"
};

public function main() {
    map<string> map3 = {...map1, ...map2};
    io:println(map3);
}
Другие вопросы по тегам