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
之类的函数一样使用运算符索引吗?
答案 0 :(得分:2)
我没有很好的答案,但是我有一个可能有用的观察。当您尝试定义如下内容时:
let (.[,]) v1 v2 = v1 + v2
您收到一条错误消息,提示:
错误FS0035:不建议使用此结构:该运算符的处理方式现在由F#编译器直接处理,并且其含义无法重新定义
我认为过去通常是使用实际的运算符来完成索引的(我似乎记得可能是这种情况,但是无法进行谷歌搜索),但是正如错误消息所暗示的那样,现在可能已经完成了不一样。我不确定为什么这不适用于.[]
!
这些funky operator names出现在F# compiler source code的几个地方。