XQuery 中的运算符“=>”有什么作用?
What does the operator "=>" in XQuery do?
当我查找 XQuery 示例时,我有时会看到运算符 =>
used。
我试图搜索它的含义,但找不到任何东西。由于我使用的是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()
它是 Arrow Operator,它允许您为来自 outside.So 的函数调用提供第一个参数,如果您有一个函数调用 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)
看起来调用的是单参数版本,但实际上调用的是双参数变体。
当我查找 XQuery 示例时,我有时会看到运算符 =>
used。
我试图搜索它的含义,但找不到任何东西。由于我使用的是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()
它是 Arrow Operator,它允许您为来自 outside.So 的函数调用提供第一个参数,如果您有一个函数调用 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)
看起来调用的是单参数版本,但实际上调用的是双参数变体。