Dot-Net

F# 將內部模組視為私有模組

  • September 7, 2019

任何想法為什麼以下內容無法編譯?

在最後一行它告訴我 Module1 沒有定義。如果我從 Module1 中刪除“內部”,它工作正常。

我有兩個程式碼文件,Module1.fs 在項目中的 Module2.fs 之上。

模組1.fs

module internal Module1

let sample =
   5 + 4

模組2.fs

module Module2

let sample2 =
   3 + Module1.sample

您需要為您的模組提供一個命名空間,以便internal以後的模組可以看到該模組。

let module internal MyNamespace.Module1
let module MyNamespace.Module2

編譯器錯誤

雖然這裡的答案是解決方法,但這種行為仍然是編譯器錯誤。閱讀文件和 Don Syme 的 Expert F#,沒有一點說****只有在您還使用 namespaces時才能訪問內部模組中的類型。

考慮到編譯器發出的程式碼,我認為使內部模組內的類型在程序集中可見並不困難。

編輯: 在將此行為送出給@fsbugs 後,主人本人 Don Syme 很快確認這是一個錯誤。我為這種情況添加了一個工作項:

https://visualfsharp.codeplex.com/workitem/29

引用自:https://stackoverflow.com/questions/7322635