在F#中可以使用%A制作一个速记函数来打印吗

问题描述 投票:0回答:2

我刚刚开始第一次使用 F#,使用 VSCode 和交互式笔记本。我对不得不不断地写出来感到非常恼火

printfn "%A" something

因为它杀了我的内心。

在每个文件的开头简单地写:

是错误的吗?
let print(something) = printfn "%A" something

// then use with

print(4 + 3) // int
print(3.7 + 1.1) //float
print("this is so much better") // text

为什么这个不是内置的?!

visual-studio-code f# f#-interactive
2个回答
5
投票

事实证明,将其内置起来并不简单。不是因为这是一个技术挑战,而是因为当类型是通用的时,“如何打印 X”没有单一的答案。是否应该使用国际化?它应该像

ToString
那样工作吗?它的行为是否应该像
%A
一样,速度很慢并且在 F# 版本之间发生了变化?

实施后又停止了,正是因为我们对这些问题没有明确的答案。我有自己的观点和偏好,但我的偏好可能不是你的。这就是为什么这并不像我们希望的那么微不足道。

也就是说,像你写的那样有一个小辅助函数是很常见的。也许你会用

%O
制作另一个(需要
ToString()
行为)。我经常还专门为日志记录做一个类似
printfn
的行为,但将其记录在某处。

插值字符串的存在使得对此类助手的要求不那么苛刻。但可以肯定的是,仅转储类型内容的函数仍然很常见。

带有插值字符串的示例

printfn $"{4 + 3}" // int
printfn $"{3.7 + 1.1}" //float
printfn "this is so much better" // text was always possible

2
投票

是的,当然,这样做是可以的。也许最简单的是

open type System.Console

然后使用

WriteLine (4 + 3) // int
WriteLine (3.7 + 1.1) //float
WriteLine "this is so much better" // text
© www.soinside.com 2019 - 2024. All rights reserved.