gpt4 book ai didi

f# - 为什么 F# 引用不能包含结构?

转载 作者:行者123 更新时间:2023-12-05 00:45:21 26 4
gpt4 key购买 nike

我想定义一个结构体,其中包含一些成员方法。我想使用 [<ReflectedDefinition>]标记该结构成员方法。但是编译器告诉我这是错误的。

首先看这段代码:

type Int4 =
val mutable x : int
val mutable y : int
val mutable z : int
val mutable w : int

[<ReflectedDefinition>]
new (x, y, z, w) = { x = x; y = y; z = z; w = w }

[<ReflectedDefinition>]
member this.Add(a:int) =
this.x <- this.x + a
this.y <- this.y + a
this.z <- this.z + a
this.w <- this.w + a

override this.ToString() = sprintf "(%d,%d,%d,%d)" this.x this.y this.z this.w

它编译。但是,如果我将类型设为结构,则无法编译:

[<Struct>]
type Int4 =
val mutable x : int
val mutable y : int
val mutable z : int
val mutable w : int

[<ReflectedDefinition>]
new (x, y, z, w) = { x = x; y = y; z = z; w = w }

[<ReflectedDefinition>]
member this.Add(a:int) = // <----------- here the 'this' report compile error
this.x <- this.x + a
this.y <- this.y + a
this.z <- this.z + a
this.w <- this.w + a

override this.ToString() = sprintf "(%d,%d,%d,%d)" this.x this.y this.z this.w

我收到以下错误:

error FS0462: Quotations cannot contain this kind of type

指向this在此代码中。

有人知道为什么我不能在结构成员函数上创建引用吗?我想这可能是因为该结构是值类型,所以这个指针应该是 byref。

最佳答案

事实上,在 F# 3.0 中观察到的编译器错误如下:

error FS1220: ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter

观察到的行为的根本原因是 F# 引用的限制 - 您不能使用 byref输入引用的代码。

然而,此限制的后果仅适用于实例 struct成员; static struct成员可以用[<ReflectedDefinition]>装饰属性。

关于f# - 为什么 F# 引用不能包含结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939777/

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