簡體   English   中英

如何將記錄元組轉換為私有值

[英]How to destucture a tuple of records to private values

如何使用模塊級let綁定將兩個私有值綁定到元組中的記錄?

type private T = {F:int}
let private a = {F=1}
let private b, private c = {F=2}, {F=3}

在這個例子中, a工作正常,但bc的綁定都失敗並出現錯誤:

錯誤FS0410:類型'T'可訪問性低於值,成員或類型'val patternInput : T * T'它用於

要了解為什么這不起作用,請使用Reflector對其進行反編譯。 你正在創建一個元組並立即對其進行解構。 無論如何,在調試模式下,中間元組被創建為封閉類型的internal字段(模式匹配的實現細節)。 當然,這使得它比T更容易訪問, Tprivate 我很想知道這是不是一個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

我認為在模塊級私有let綁定中進行解構有一些問題是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM