代码之家  ›  专栏  ›  技术社区  ›  p.s.w.g

f使用[]运算符作为函数

  •  1
  • p.s.w.g  · 技术社区  · 6 年前

    f允许将大多数运算符视为函数。例如:

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

    但是,我不确定是否可以使这个相同的语法与index运算符一起工作。( .[...] )

    我试过了:

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

    “int[]和int”类型都不支持运算符“.[]”(使用外部f编译器)

    还有:

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

    类型“int”、“a[]”都不支持运算符“.[]”(使用外部f编译器)

    我猜是这样的 […] 实际上不是一个运算符,而是一个特殊的内置语法,不能以函数方式使用,但可能我遗漏了一些东西。是否可以像通常使用函数一样使用运算符索引 Array.get ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tomas Petricek    6 年前

    我没有一个很好的答案,但我有一个潜在的有用的观察。当你试图定义这样的东西时:

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

    您会收到一条错误消息,说:

    错误fs0035:此构造已弃用:此运算符的处理现在由f编译器直接处理,其含义无法重新定义

    我认为过去索引是使用实际的操作符完成的(我似乎记得可能是这样,但谷歌搜索不可能做到),但正如错误消息所表明的,现在做起来可能有所不同。我不知道为什么这不适用于 .[] 虽然!

    这些 funky operator names 出现在 F# compiler source code .