gpt4 book ai didi

f# - 当 F# 记录的字段被声明为私有(private)时,奇怪的可访问性范围

转载 作者:行者123 更新时间:2023-12-04 10:53:42 25 4
gpt4 key购买 nike

当 F# 记录的字段部分被声明为私有(private)时,我刚刚注意到一种相当反直觉的行为。 (这与 Is it possible to make a field of a record private? or to make a member of record private? 有关)

在这个例子中...

type MyRec = 
private // Fields declared private, or at least I thought so.
{ a : int
b : int }
member x.A = x.a
member private x.Both = x.a + x.b
static member CreateMyRec(a, b) = { a = a; b = b }

let foo = MyRec.CreateMyRec(1,2)
let bar = foo.a // No error. Huh?
let baz = foo.Both // Error: not accessible.

...私有(private)成员(member) Both正如预期的那样,在类型声明范围之外是不可访问的。但是,字段 a是可访问的。

如果将 MyRec 放入模块中,则这些字段将成为该模块的私有(private)字段。这就是您期望模块中的顶级声明的行为方式,但我期望在类型中声明为私有(private)的任何内容都对该类型私有(private),而不是其封闭模块。

这种行为真的很奇怪,还是我在这里的推理中遗漏了什么?

最佳答案

据我所知,这是一个记录不足的功能。但是,规范的第 10.5 节,Accessibility Annotations , 状态:

private on a type, module, or type representation in a module means “private to the module.”



“类型表示”是与记录字段相关的部分。

关于f# - 当 F# 记录的字段被声明为私有(private)时,奇怪的可访问性范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461734/

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