f# - 为什么我在 printfn 尝试打印对象时看到 Program+ 前缀?

标签 f# c#-to-f#

我有一个我创建的类的对象,我正在使用 %A 格式说明符打印该对象,我看到了类型名 Program+myclass 而不仅仅是 myclass ?这是为什么?

有人可能会说 Program 是命名空间,如果是这样那我为什么不能执行以下操作?

let o = Program+myclass()

这是我的完整代码

open System

type myclass() = 
    member val X = 3 with get,set

[<EntryPoint>]
let main argv = 

    let o = myclass()

    o |> printfn "Here is myclass object %A"

    Console.ReadKey()
    0 // return an integer exit code

最佳答案

所有的类都隐式地放在一个模块中。

Program 只是当您的程序只有一个文件时隐式创建的模块的名称。

例如运行fsi中的代码会打印

Here is myclass object FSI_0003+myclass

前缀只是模块的名称。然后编译器隐藏这个实现,这样你就不能自己使用它,但如果你使用反射就可以。

关于f# - 为什么我在 printfn 尝试打印对象时看到 Program+ 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24358845/

相关文章:

F# 递归类型的查找问题

string - 整数和字符串 F#

f# - 在 F# 中,如何生成具有 Func<obj> 类型的表达式?

f# - 在 F# 中缩小 try-with block ?

f# - 生成无限的数字集

f# - 我应该为 Mac OS X 中的 F# 脚本使用哪个 shebang?

compiler-construction - F# - 应用序列转换时的可变上下文

f# - C# 到 F# 转换公共(public)部分类设备 : MarshalByRefObject

events - 什么是 F# 相当于 C# "public event "

performance - 简单的 XNA 2D 演示 : why is my F# version slower than C# version?