为什么F#有一元加运算符?

Pet*_*son 12 f# unary-operator

有些语言使用一元加运算符进行隐式转换,例如将字符串强制转换为数字(例如Javascript)或将小数字类型转换为int(例如大多数基于C的语言),或者在重载运算符时使用.

由于一元加号主要用于这样的hackish目的,而且由于F#不执行自动扩展转换,我很惊讶F#包括一元加号.

令我惊讶的是,Haskell没有一元加运算符.由于F#设计受到Haskell的影响,我很好奇为什么当Haskell显然不支持F#需要一元加时.

你能举例说明F#中一元加的可靠用法吗?如果你不能,为什么它包含在语言中呢?

Dan*_*iel 2

我将总结扩展评论。可能的原因(直到给出更权威的答案为止):

  1. 与 OCaml 保持一致,F# 就是从 OCaml 派生而来的(如果您做错了/不必要的事情,最好继续这样做,以便人们知道会发生什么:-))
  2. 重载(主要针对自定义类型)
  3. 一元否定的对称性

  • 出于同样的原因,我们应该在语言中添加一个一元“是”运算符,使其与一元“非”(`!`)运算符对称。我们可以进一步证明包含“yes”运算符是合理的,因为当有人想要为自己的自定义类型重载它时,它会很有用。 (5认同)
  • @PeterOlson 我将其称为“确实”运算符。“如果x确实等于三……” (5认同)
  • `!` 是取消引用,而不是 `not`。“not”函数有一个对应的正数,称为“id”。 (2认同)