【发布时间】:2017-05-09 11:30:40
【问题描述】:
$ 允许在自定义运算符中使用,但如果您尝试使用 $$、<$> 或例如 ~$% 作为运算符名称,您将收到以下错误:
错误 FS0035:不推荐使用此构造:'$' 不允许作为运算符名称中的字符,保留以供将来使用
$ 显然名称中也有'$',但是可以,为什么?
即:
let inline ( $ ) f y = f y
// using it works just fine:
let test =
let add x = x + 1
add $ 12
我在在线示例中经常看到$,并且显然是一种特殊的运算符。 $(即在 Haskell 或 OCaml 中)的这种特殊处理或角色是什么?如果允许,<$> 应该做什么(编辑)?
试图通过创建像op_DollarDollar 这样的函数来欺骗系统,但不会成功,语法检查也在调用站点上完成。虽然作为一个例子,这个技巧确实适用于其他(合法的)运营商:
// works
let inline op_BarQmark f y = f y
let test =
let add x = x + 1
add |? 12
// also works:
let inline op_Dollar f y = f y
let test =
let add x = seq { yield x + 1 }
add $ 12
【问题讨论】:
-
是的,这与我们无法在 F# 中定义标准的
<$>运算符相同。我们应该提交请求以允许这些运算符。 -
@guy,对于
:我有点理解,因为:>和:?>可能不应该被覆盖。我可以对::说同样的话,但是由于@是可覆盖的并且..也是如此(令人惊讶,但确实如此),我只会假设::不是因为与冒号相关的受保护运算符。 -
@guy,什么是“标准”
<$>运算符,什么标准? -
这是我等待kvb回答的问题
标签: f# operator-overloading dollar-sign