JSONiq console.log или распечатать

Можно ли печатать на консоль для отладки в сценарии JSONiq/Zorba?

например

declare function utils:lowerCaseKey($obj as item) as item{
   print($obj)
  {|
    for $k in  distinct-values(keys( $obj ))
    return { lower-case($k) : $obj.$k } (: note the ',' to create a sequence :)
  |}
};

1 ответ

Решение

Да: trace Функция служит этой цели. Он может быть вызван для любого выражения, для которого нужно увидеть результат, вместе с меткой по вашему выбору.

declare function utils:lowerCaseKey($obj as item) as item
{
  {|
    for $k in  distinct-values(keys( trace($obj, "obj") ))
    return { lower-case($k) : $obj.$k }
    (: note the ',' to create a sequence :)
  |}
};

Это приведет к выводу, например:

obj [1]: { "foo" : "bar" }
obj [2]: { "foo" : "bar2" }

Где именно (в командной строке, в файле журнала...) эти выходные данные должны быть задокументированы в каждом движке. Zorba будет по умолчанию выводить в stderr.

Обратите внимание, что это декларативный язык, так что trace ведет себя иначе, чем print, Некоторые выражения могут быть оптимизированы, если они не нужны, и в этом случае они не генерируют никаких следов. Например,

(1, trace(2, "foo"))[1]

не может генерировать след. Аналогично, порядок, в котором генерируются трассы, может зависеть от реализации, потому что JSONiq, как и XQuery, оставляет каждому механизму свободу в том, как наилучшим образом оценить выражение, если его результаты соответствуют спецификации.

Другие вопросы по тегам