如果使用F#Interactive Shell(FSI),则推断的表达式类型(signature)将与其值一起打印到控制台:
val it : int * string * float = (42, "Hello F#", 42.0)
如何在我自己的代码中模仿相同的行为,例如将推断类型作为F#表达式的字符串获取?
我不需要动态评估任何F#表达式,这些表达式在编译时是已知的,并且是我的(静态)F#代码的一部分。我需要这个功能才能在我的F#演示中模仿LINQPad中的FSI输出。
答案 0 :(得分:11)
Unquote具有获取类型的F#签名的工具。只需下载最新版本并通过LINQPad向Unquote.dll添加引用,然后就可以执行此操作。
如果您有兴趣,可以使用源代码达到峰值,以实现FSharpName
Type
扩展程序:http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54。
另一种巧妙的方法是使用LINQPad的beta Custom Visualizer API将FsEye嵌入到LINQPad中(FsEye使用与Unquote相同的F#类型签名打印算法)。这也很简单,你需要做的就是从最新版本的FsEye下载LINQPad beta,下载并引用FsEye.dll,然后你可以做到这一点。
答案 1 :(得分:1)
如果您查看F#编译器代码并查看编译器如何处理--sig选项,我认为这将为您提供所需的内容。有关--sig选项和签名的更多信息,请点击此处: