【问题标题】:Is possible to define same-named operator for different argument count?是否可以为不同的参数计数定义同名运算符?
【发布时间】:2023-04-01 15:19:02
【问题描述】:

是否可以为不同的参数计数定义同名运算符?

如果有可能,那怎么做?

例如我想要的:

let (-) x y = x - y
let (-) x  = -x

遗憾的是,我不能只调用 -x,我需要 (-)x 才能使用它,但这是另一个与主要问题无关的子问题。

【问题讨论】:

  • 您要查找的词是“重载”,例如,您想知道是否可以在 F# 中重载运算符。 (我不知道 F#,所以我不能回答那部分,抱歉 - 但也许谷歌搜索“重载 F#”会起作用?)

标签: syntax f# operators


【解决方案1】:

这对于 let 绑定是不可能的

来自MSDN

您可以通过这种方式重新定义常规算术运算符 因为 F# 的范围规则规定新定义的运算符 优先于内置运算符。

但是,您可以使用带有重载的 static member (+) 版本 (Same MSDN page)

特别是,这有效:

> type t() =                   
-  static member (+) (a, b) = 1
-  static member (+) a = 5;;   

【讨论】:

猜你喜欢
  • 2018-03-16
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多