cnd*_*cnd 1 syntax f# operators
我想定义一些运算符,+ 但让我们调用-|-例如
let a = -|- 1
let b = 1 -|- 1
let c = 1 -|- 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
至少有2条第一行可以使用+但是如何声明自己的运算符呢?
我认为通常没有一种直接的方法可以做到这一点.你可以使用inline一个混合了静态成员约束的运算符来覆盖你想要的一些情况,但我认为它不会很优雅.
但是,对于某些运算符名称,您可以定义单独的前缀和中 缀版本,其中包含前两种情况:
// Prefix version of the operator (when you write e.g. '+. 10')
let (~+.) a = a * 10
// Infix version of the operator (when you write e.g. '1 +. 10')
let (+.) a b = a + b
// Sample use
+. 10
10 +. 20
Run Code Online (Sandbox Code Playgroud)
你仍然无法写10 +. 20 30 40,因为那时你需要一个重载的中缀运算符.
值得注意的是,您不能对所有运营商名称执行此操作.以下是中缀运算符的允许运算符名称的F#规范中的语法定义:
infix-or-prefix-op:=
+, - ,+., - .,%,&,&&prefix-op:=
infix-or-prefix-op
~~~~~~(以及〜的任何重复)
!OP(除了!=)
PS:我一般不是自定义操作员的忠实粉丝 - 在某些情况下,它们很好,但很难发现(你没有在IntelliSense中看到它们),除非你使用标准数字计算,通常很难理解它们的含义.所以我可能会考虑其他方法......