F#使用。[]运算符作为函数

时间:2019-01-23 23:58:17

标签: arrays f# operators

F#可将大多数运算符视为函数。例如:

let f = (+)
f 1 2 // <- 3

但是,我不确定是否可以使索引运算符(.[...])使用相同的语法。

我尝试过:

let f = (.[])
f [| 1 |] 0 
  

'int [],int'类型都不支持运算符'。[]'(使用外部F#编译器)

并且:

let f = (.[])
f  0 [| 1 |]
  

'int,'a []'类型都不支持运算符'。[]'(使用外部F#编译器)

我的猜测是.[...]实际上不是运算符,而是一种特殊的内置语法,无法以功能方式使用,但也许我遗漏了一些东西。可以像平常使用Array.get之类的函数一样使用运算符索引吗?

1 个答案:

答案 0 :(得分:2)

我没有很好的答案,但是我有一个可能有用的观察。当您尝试定义如下内容时:

let (.[,]) v1 v2 = v1 + v2

您收到一条错误消息,提示:

  

错误FS0035:不建议使用此结构:该运算符的处理方式现在由F#编译器直接处理,并且其含义无法重新定义

我认为过去通常是使用实际的运算符来完成索引的(我似乎记得可能是这种情况,但是无法进行谷歌搜索),但是正如错误消息所暗示的那样,现在可能已经完成了不一样。我不确定为什么这不适用于.[]

这些funky operator names出现在F# compiler source code的几个地方。