当我查找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()
它是 箭头操作员,它允许你从外部向函数调用提供第一个参数。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)
看起来它调用了一个参数的版本,但实际上调用了两个参数的变体。