Edw*_*rey 4 f# tuples access-control
如何使用模块级let绑定将两个私有值绑定到元组中的记录?
type private T = {F:int}
let private a = {F=1}
let private b, private c = {F=2}, {F=3}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,a工作正常,但对于绑定b和c每个失败的错误:
错误FS0410:类型
'T'比值,构件不易接近或类型'val patternInput : T * T'它是在使用
要了解为什么这不起作用,请使用Reflector对其进行反编译.你正在创建一个元组并立即对其进行解构.无论如何,在调试模式下,中间元组被创建为internal封闭类型的字段(模式匹配的实现细节).当然,这使得它更容易接近T,这是private.我很想知道这是不是一个bug(好像是这样).
它变得怪异......
以下代码无法编译(语法错误),但如果类型是公共let的let private,则编译正常,而不是使用.
type private T = {a:int; b:int}
let private t = {a=0; b=0}
let private {a=a; b=b} = t //syntax error
type private U() = class end
let private ul = [U()]
let private [u] = ul //syntax error
Run Code Online (Sandbox Code Playgroud)
我认为可以说模块级私有let绑定中的解构存在一些问题.