如何打印带有单位的数字?我应该使用“%A”还是先剥离该单元?MSDN 什么也没说:http: //msdn.microsoft.com/en-us/library/vstudio/ee370560.aspx
[<Measure>] type hr
let a = 10<hr>
printf "%d" a // <-- doesn't compile: Unit of measure 'hr' doesn't match the unit of measure '1'
如何打印带有单位的数字?我应该使用“%A”还是先剥离该单元?MSDN 什么也没说:http: //msdn.microsoft.com/en-us/library/vstudio/ee370560.aspx
[<Measure>] type hr
let a = 10<hr>
printf "%d" a // <-- doesn't compile: Unit of measure 'hr' doesn't match the unit of measure '1'
如果您想为您hr
的度量单位输入强类型,您可以使用“%a”。
printf "%a"
需要一个函数,其中第一个参数是 a TextWriter
,第二个参数是您指定的任何值。使用这将允许您将 requireint<hr>
作为第二个参数,它将在编译时提供类型检查。
看看下面的代码:
open System.IO
[<Measure>] type hr
let printHours (tw:TextWriter) (hours:int<hr>) =
tw.Write("{0} hour(s)", hours)
您问题中的示例将写为:
let a = 10<hr>
printf "%a" printHours a
这将在控制台打印10 小时。
如果你传入一个没有hr
单位的值,你会得到一个可爱的错误:
printf "%a" printHours 10;;
printf "%a" printHours 10;;
-----------------------^^
error FS0001: This expression was expected to have type
int<hr>
but here has type
int
我可能会要么做要么printf "%O hour(s)" a
做int a |> printf "%i hour(s)"
。一种是类型安全的,一种是短的。