Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像REPL那样从F#打印_F# - Fatal编程技术网

如何像REPL那样从F#打印

如何像REPL那样从F#打印,f#,F#,我试图使用F作为REPL,并使用C库编写脚本。在REPL中计算对象时,它会打印其内部结构: > <expression>;; val it: <type> = <subtype> {<prop> = <value>; ... <prop> = <value>;} >;; val it:= { = ; ... = ;} 然后我用相同的表达式编写一个脚本,并

我试图使用F作为REPL,并使用C库编写脚本。在REPL中计算对象时,它会打印其内部结构:

> <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级。从一个不是我的图书馆。我会尽量提供我有时间的例子,但据我记忆所及,这是非常简单的。