2

単位付きの数値を出力するにはどうすればよいですか? 「%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'
4

2 に答える 2

3

測定単位に厳密な型付けが必要な場合はhr、"%a" を使用できます。

printf "%a"は、最初のパラメーターが aTextWriterで、2 番目のパラメーターが指定した任意の値である関数を想定しています。int<hr>これを使用すると、コンパイル時に型チェックを提供する 2 番目の引数としてrequire を使用できます。

以下のコードを見てください。

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    
于 2013-10-02T05:11:34.363 に答える
2

私はおそらくどちらかを行うでしょprintf "%O hour(s)" aint a |> printf "%i hour(s)"。1 つは型安全で、もう 1 つは short です。

于 2013-10-02T06:24:53.070 に答える