为什么';t%A文本格式与F#中的内部模块一起工作?

为什么';t%A文本格式与F#中的内部模块一起工作?,f#,text-formatting,F#,Text Formatting,以下代码未按预期格式化字符串(它只打印完全限定的类名): 但是,如果未将MyModule.Types指定为internal,则格式将按预期工作。为什么格式化不适用于内部模块?这与反思有关吗?除了公开模块外,还有其他解决办法吗 我应该提到模块在单独的.fs文件中。这对我很有用,例如,我得到了输出: λ。\SO180207.exe 添加10个 添加5个 添加5个 [| |] 您可以看到打印了add10。另外,当我访问内部模块时,value和printfn“%A”语句都被执行 这是本项目的结构: My

以下代码未按预期格式化字符串(它只打印完全限定的类名):

但是,如果未将
MyModule.Types
指定为
internal
,则格式将按预期工作。为什么格式化不适用于
内部
模块?这与反思有关吗?除了公开模块外,还有其他解决办法吗


我应该提到模块在单独的.fs文件中。

这对我很有用,例如,我得到了输出:

λ。\SO180207.exe
添加10个
添加5个
添加5个
[| |]

您可以看到打印了
add10
。另外,当我访问内部模块时,value和
printfn“%A”
语句都被执行

这是本项目的结构:

MyModule.fs文件:

module internal MyModule.Types 

type Action =
    | Add of int
    | Update of int * string
    | Delete of string

let x = Add 5
printfn "%A" x
Program.fs文件:

module MyModule.Program
open MyModule.Types

[<EntryPoint>]
let main argv =
    let x = Add 10 
    printfn "%A" x // prints Add 10 
    printfn "%A" MyModule.Types.x // prints Add 5 twice
    printfn "%A" argv 
    0 // return an integer exit code
λ。\SO180207.exe
添加10个
添加5个
“(添加5,添加5)”
添加5个
[| |]


我编辑了这个问题,以便更准确地反映我正在运行的实际代码。代码正在.NET Framework 4.6.1上运行F#4.4.1.0。@Ralphie类似的设置,但从您描述的内容来看,
printfn
在设置内部修饰符时使用的是
%O
而不是
%A
。不太清楚为什么会这样。
module MyModule.Program
open MyModule.Types

[<EntryPoint>]
let main argv =
    let x = Add 10 
    printfn "%A" x // prints Add 10 
    printfn "%A" MyModule.Types.x // prints Add 5 twice
    printfn "%A" argv 
    0 // return an integer exit code
module MyModule.Types 

type Action =
    | Add of int
    | Update of int * string
    | Delete of string
    override x.ToString() = sprintf "%A" (x,x)
let x = Add 5
printfn "%A" x
printfn "%A" (x.ToString()) |> ignore