我可以在F#Interactive中获取没有内容的推断类型的值吗?

时间:2015-07-26 16:20:49

标签: f# fsi

在F#Interactive控制台中创建值时,将显示推断的类型和值的内容。

我如何在以后重新显示推断类型而不显示所有内容?

例如,我有一个1000个项目的数组mydata。在F#Interactive控制台中键入mydata将显示类型,但也会显示数组的内容。

2 个答案:

答案 0 :(得分:2)

Unquote具有类型的扩展属性:

> let mydata = [|Some([42])|];;
val mydata : int list option [] = [|Some [42]|]
> mydata.GetType().FSharpName;;
val it : string = "option<list<int>>[]"

答案 1 :(得分:2)

如何使用类似这样的类型的printfn:

F# Interactive for F# 3.1 (Open Source Edition)
Freely distributed under the Apache 2.0 Open Source License
For help type #help;;

> 
val mya : int [] = [|3; 2; 5; 6; 7; 8|]

> printfn "%A" (mya.GetType());;

System.Int32[]
val it : unit = ()

您可以使用一点实用程序功能缩短所需的输入内容:

let pm v = printfn "%A" (v.GetType())

您可以使用如下:

> pm mya;;

System.Int32[]
val it : unit = ()

&#34; PM&#34;代表&#34;打印我&#34;。无论你想要什么,都可以打电话:)

如果您不喜欢GetType()中的类型名称,则另一种方法只是导致您要评估的值出错。这将为您提供更友好的F#类型名称(如果您不介意忽略错误)。例如,您可以执行以下列表:

> 
val myl : string list = ["one"; "two"]

> printfn myl;;

Script.fsx(195,9): error FS0001: The type 'string list' is not compatible with the type 'Printf.TextWriterFormat<'a>'

请注意&#39;&#39;

之间的字符串列表类型

最后,您可以使用:(MSDN

fsi.ShowDeclarationValues <- false

但这只会使初步评估无效。