首页 > 解决方案 > F# 使用 .[] 运算符作为函数

问题描述

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

标签: arraysf#operators

解决方案


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

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

您收到一条错误消息:

错误 FS0035:不推荐使用此构造:此运算符的处理现在由 F# 编译器直接处理,其含义无法重新定义

我认为过去是使用实际运算符完成索引的情况(我似乎记得可能是这种情况,但谷歌搜索是不可能的),但正如错误消息所暗示的那样,现在可能以不同的方式完成。我不确定为什么这不适用于.[]

这些时髦的运算符名称出现在F# 编译器源代码中的几个地方。


推荐阅读