XQuery中的运算符"=> "是做什么的?

问题描述 投票:5回答:1

当我查找XQuery的例子时,我有时会看到操作符"=>"。=>用的。

我试着搜索它的含义,但没有找到任何东西。因为我使用的是MarkLogic,所以有可能它只适用于MarkLogic,但我对此表示怀疑。

从例子中,我知道它以某种方式将函数链在一起,但我想知道发生了什么。

这是我找到的一些例子。

let $map := map:map()
  =>map:with("some-key",<info>45683</info>)
return <result>{$map}</result>
let $employees := op:from-view("main", "employees")
let $expenses  := op:from-view("main", "expenses")
let $totalexpenses  := op:col("totalexpenses")
return $employees
   => op:join-inner($expenses, op:on(
                    op:view-col("employees", "EmployeeID"),
                    op:view-col("expenses", "EmployeeID")))
   => op:group-by(op:view-col("employees", "EmployeeID"),
                 ("FirstName", "LastName", 
                  op:view-col("expenses", "Category"),
                  op:sum($totalexpenses, 
                  op:view-col("expenses", "Amount"))))
   => op:order-by(op:view-col("employees", "EmployeeID")) 
   => op:result() 
xquery marklogic marklogic-9
1个回答
6
投票

它是 箭头操作员,它允许你从外部向函数调用提供第一个参数。foo($a, $b, $c),你可以等价地写成 $a => foo($b, $c). 如果你有很多嵌套的函数调用作为第一个参数,这很方便。

string-join(reverse(tokenize(upper-case('a;b;c'), ';')), '_')

用箭头操作符可以写成一个很好的流水线。

'a;b;c' => upper-case() => tokenize(';') => reverse() => string-join('_')

同理 "C_B_A".

箭头运算符的一个缺点是,当你想一目了然地找出XQuery代码中的函数调用引用了哪个函数时,你必须考虑到它。如果你声明了两个函数 local:foo($seq) {...}local:foo($seq, $accum) {...}那么 $asdf => local:foo($x) 看起来它调用了一个参数的版本,但实际上调用了两个参数的变体。

© www.soinside.com 2019 - 2024. All rights reserved.