Почему мы можем устанавливать списки, но не константы из функции каратэ? - PullRequest
1 голос
/ 30 апреля 2019

Нам нужно karate.get () при установке константы из функции каратэ:
Почему оператор '+' внутри функций не изменяет * def сделанные переменные?

Почему нам не нужно это при добавлении в списки?
Пример:

Scenario: karate forEach operation on maps
    * def keys = []
    * def vals = []
    * def idxs = []
    * def fun = function(x, y, i){ keys.add(x); vals.add(y); idxs.add(i) }
    * def map = { a: 2, b: 4, c: 6 }
    * eval karate.forEach(map, fun)
    * match keys == ['a', 'b', 'c']
    * match vals == [2, 4, 6]
    * match idxs == [0, 1, 2]

1 Ответ

0 голосов
/ 30 апреля 2019

Взять пример keys. Когда функция была объявлена, keys был доступен, и на самом деле это Java List за кулисами. Функция может без проблем вызывать метод add(). Ссылка на keys является фиксированной и не изменяется.

Но когда вы пытаетесь сделать то же самое с примитивным типом - например, строка или число - вы не можете изменить ссылку на переменную каратэ из движка JS. Вы должны попросить каратэ установить (или получить) последнее значение.

...