如何用单位打印数字?我应该使用“%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'
答案 0 :(得分:3)
如果您希望对hr
计量单位进行强力打字,可以使用“%a”。
printf "%a"
需要一个函数,其中第一个参数是TextWriter
,第二个参数是您指定的任何值。使用它将允许您需要int<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
答案 1 :(得分:2)
我可能会printf "%O hour(s)" a
或int a |> printf "%i hour(s)"
。一种是类型安全的,一种是短的。