为什么';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