如何像REPL那样从F#打印
我试图使用F作为REPL,并使用C库编写脚本。在REPL中计算对象时,它会打印其内部结构:如何像REPL那样从F#打印,f#,F#,我试图使用F作为REPL,并使用C库编写脚本。在REPL中计算对象时,它会打印其内部结构: > <expression>;; val it: <type> = <subtype> {<prop> = <value>; ... <prop> = <value>;} >;; val it:= { = ; ... = ;} 然后我用相同的表达式编写一个脚本,并
> <expression>;;
val it: <type> =
<subtype> {<prop> = <value>;
...
<prop> = <value>;}
>;;
val it:=
{ = ;
...
= ;}
然后我用相同的表达式编写一个脚本,并希望它打印相同的输出。但是我找不到任何print
函数可以实现这一点。我能找到的最接近的方法是printfn“%O”
,它使用ToString()方法,在我的例子中没有定义,只打印对象类型
这似乎是一个简单的问题,但我在这里或谷歌的任何地方都找不到答案
似乎是集中在类型,我基本上需要相当漂亮的印刷价值
PS:似乎是fsi.exe内部的代码。见和资料来源。我试图通过反射调用它们,但很简单
Internal.Utilities.StructuredFormat.any\u to\u string(value)
只打印了一个类型。如果有人知道如何正确地调用它,那就太好了,但我暂时决定不在上面花费更多的精力。我也遇到了同样的问题,但在我的例子中,printfn“%A”
给出了与我在F#Interactive(除去缩进)中看到的完全相同的结果:
有关列表:
> let l = [(2,"a")];;
val l : (int * string) list = [(2, "a")]
> printfn "%A" l;;
[(2, "a")]
作为记录:
> type R = { A: string; B: int };;
type R =
{A: string;
B: int;}
> let r = { A = "Foo"; B = 1 };;
val r : R = {A = "Foo";
B = 1;}
> printfn "%A" r;;
{A = "Foo";
B = 1;}
对于非F#数据类型:
> let u = UriBuilder("http", "bar", 80);;
val u : UriBuilder = http://bar:80/
> printfn "%A" u;;
http://bar:80/
可能与以下内容重复:?@helge rene urholm,似乎涉及更改对象类型本身;我不能做这件事,因为它来自图书馆。实际上,我想知道他们是如何实现“两个打印语句都产生:{a=5;}”结果的;这正是我需要的。您是否尝试过
printfn“%A”
?听起来这才是你真正想要的,而不是%O
@rmunn是的,两者都只是打印了对象的类名,看起来像是正确定义的.ToString方法。就我而言,没有。REPL的输出会打印对象内部。我想我还是不明白你的问题。与使用printfn“%a”
时得到的数据相比,REPL中得到不同输出的数据类型有哪些?一些C级?是的,C级。从一个不是我的图书馆。我会尽量提供我有时间的例子,但据我记忆所及,这是非常简单的。