gpt4 book ai didi

f# - 你能在 F# 中定义你自己的运算符吗?

转载 作者:行者123 更新时间:2023-12-04 01:28:37 25 4
gpt4 key购买 nike

有没有办法在 F# 中定义自己的运算符?

如果是这样,有人可以给我举个例子吗?我进行了简短的搜索,但找不到任何东西。

最佳答案

是的:

let (+.) x s = [for y in s -> x + y]
let s = 1 +. [2;3;4]

可以在 F# 运算符中使用的字符在 the docs 中列出。 .他们是 !%&*+-./<=>@^|~对于第一个之后的任何字符, ? .优先级和固定性由运算符的第一个字符决定(参见规范)。

您可以像我上面所做的那样创建自己的 let-bound 运算符,在这种情况下,它们的工作方式就像 let-bound 函数一样。您还可以将它们定义为类型的成员:
type 'a Wrapper = Wrapper of 'a with
static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)

let w = (Wrapper 1) +! (Wrapper 2)

在这种情况下,您不需要预先定义一个 let-bound 函数来使用运算符; F# 会在类型上找到它。您可以使用内联定义充分利用这一点:
let inline addSpecial a b = a +! b
let w2 = addSpecial w (Wrapper 3)

更进一步,您还可以将类型上的运算符设置为内联,以便您可以在类的更多种类的实例上使用它们:
type 'a Wrapper = Wrapper of 'a with
static member inline (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)

let wi = (Wrapper 1) +! (Wrapper 2)
let wf = (Wrapper 1.0) +! (Wrapper 2.0)
let wi2 = addSpecial wi wi
let wf2 = addSpecial wf wf

关于f# - 你能在 F# 中定义你自己的运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com