Haskell中的字符串格式

Pra*_*are 34 string haskell

什么是haskell相当于

string str = string.Format("{0} {1}",10,20); // C#
Run Code Online (Sandbox Code Playgroud)

new*_*cct 35

GHC中有一个Printf模块.

import Text.Printf
str :: String
str = printf "%d %d" 10 20
Run Code Online (Sandbox Code Playgroud)

但是这样做可能更简单

str = show 10 ++ " " ++ show 20
Run Code Online (Sandbox Code Playgroud)

  • 你应该切换到GHC.拥抱是无需维护的,速度很慢,并且支持Hackage上的极少数软件包.它也不是Haskell平台规范的一部分. (15认同)
  • @SwiftsNamesake:它还返回`String`.它可以返回任何类型的'PrintfType`. (2认同)

Dmi*_*lov 24

您可以使用text-format-simpleformat提供的功能:

import Text.Format
format "{0} {1}" [show 10, show 20]
Run Code Online (Sandbox Code Playgroud)

此功能具有签名:

format :: String -> [String] -> String
Run Code Online (Sandbox Code Playgroud)

所以你需要的只是提供你的参数作为字符串.
另一个例子:

format "Some {0} believes that 1 + 1 = {1}." ["people",show 10]
Run Code Online (Sandbox Code Playgroud)

  • 我建议/不要/使用该软件包,因为它在它可以做的事情上非常有限.我正在开发一个名为[text-format](http://hackage.haskell.org/package/text-format)的软件包,它通常更有能力,并且已经非常适用于此目的. (4认同)
  • @ BryanO'Sullivan感谢指针.我看过你的包,虽然它看起来比替代品更有用(并且有一个格式说明符的类型而不是普通的字符串,这似乎是一个非常好的主意),不幸的是,它产生了`数据. Text`作为输出,而不是`String`.由于我需要与依赖于"String"的现有代码集成,因此需要对我进行不必要的转换.是否有替代产生`String`输出并支持格式说明符,允许您更改输出中字段的顺序? (2认同)

Ode*_*ded 8

这是你想要的?

printf "%d %d" 10 20
Run Code Online (Sandbox Code Playgroud)

Text.Printf


She*_*rsh 8

在这里给出答案,以防有人在StackOverflow上搜索Haskell中的格式库.fmt现在称为类型安全和快速格式化库.有了它,您可以编写如下代码:

> "There are "+|n|+" million bicycles in "+|city|+"."
Run Code Online (Sandbox Code Playgroud)