Объединение двух карт с использованием оператора распространения дает ошибку в балерине
Я попытался объединить две карты с помощью оператора распространения, и это выдало ошибку.
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);
}