gpt4 book ai didi

f# - 如何像 REPL 一样从 F# 打印

转载 作者:行者123 更新时间:2023-12-03 17:39:08 27 4
gpt4 key购买 nike

我正在尝试使用 F# 作为 REPL 和使用 C# 库的脚本。当我在 REPL 中评估一个对象时,它会打印出它的内部结构:

> <expression>;;
val it: <type> =
<subtype> {<prop> = <value>;
...
<prop> = <value>;}

然后我正在编写一个具有相同表达式的脚本并希望它打印相同的输出。但我找不到任何 print可以做到这一点的功能。我能找到的最接近的是 printfn "%O"它使用 ToString() 方法,在我的例子中没有定义,只是打印对象类型。

这似乎是一个简单的问题,但我在这里或谷歌的任何地方都找不到答案。

How to generate the F# type signature similar to FSI in my own code?似乎专注于类型,我基本上需要相当漂亮的打印值(value)。

PS:似乎它是 fsi.exe 内部的代码。见 fsi.fssformat.fs来源。我试图通过反射来调用它们,但很简单 Internal.Utilities.StructuredFormat.any_to_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/

关于f# - 如何像 REPL 一样从 F# 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com