Позвольте мне объяснить $ $$ $$$, просто чтобы быть на той же странице. Когда вы видите, что они являются переменными ссылками на неявный лямбда-параметр. Позвольте мне привести вам пример
[3,7,11] map ((item,index) -> {a: item, b: index})
Вот как можно написать функцию карты с явной лямбдой
((item,index) -> {a: item, b: index})
Теперь есть способ избежать некоторых кодов болеров и это использование неявной лямбда-функции
[3,7,11] map {a: $, b: $$}
Что происходит под капотом, так это то, что DW-компилятор вставляет лямбда-объявление
[3,7,11] map (($, $$) -> {a: $, b: $$})
Так что каждый раз, когда вы видите знак доллара, просто ссылка на параметр неявной лямбды. Теперь $ - это ссылка на первый параметр $$ - это ссылка на второй $$$ на третий и следующий.
Теперь вторая функция, с которой вы столкнулись, - это объектная функция Dynami c. Эта функция делает все пары ключей и значений, которые присутствуют во вложенном выражении, в содержащий объект. Например, этот код
{
a: "Literal KVP",
([1,2,3] map {($$): $}), //Dynamic kev value pairs
(c: "Conditional KVP") if(random() > 0.2)
}
вернет что-то вроде
{
"a": "Literal KVP",
"0": 1,
"1": 2,
"2": 3,
"c": "Conditional KVP"
}
Если вы разбите выражение, вы увидите, что
([1,2,3] map {($$): $})
Возвращает
[
{
"0": 1
},
{
"1": 2
},
{
"2": 3
}
]
И затем все пары значений ключа каждого объекта сглаживаются в родительском контейнере.
Эта функция очень полезна при переходе от Json, который представляет Коллекции с массивом, к Xml, который представляет коллекции с повторяющимися элементами.