私はF#(特にF#インタラクティブを使って)で研究しているので、 "print-in-in-debug"機能を切り替えたいと思います。F#でprintfnを同等に定義する方法
私は
let dprintfn = printfn
を行うことができます
F#インタラクティブが
val dprintfn : (Printf.TextWriterFormat<'a> -> 'a)
を言うと、私は私のスクリプトでいつでも私は
dprintfn "myval1 = %d, other val = %A" a b
を使用することができます。
それはprintfn
で構文と互換性のあることはまだすべての引数を無視するように、今私は、違ったdprintfn
を定義したいと思います。どうやって?
私が考えている最も近い(まだ非稼働)変異体である:
let dprintfn (arg: (Printf.TextWriterFormat<'a> -> 'a)) =()
が、それは次のようにerror FS0003: This value is not a function and cannot be applied
が得られ、その後、dprintfn "%A" "Hello"
をコンパイルしません。
P.S.私は現在、回避策としてDebug.WriteLine(...)
のエイリアスを使用していますが、F#のタイプシステムを補うための質問はまだ興味深いです。
、ありがとうございました。しかし、もしあなたが 'printfn'の型を知っていて、同じシグネチャで独自のfuncを定義する方法があれば、それは非常に興味深く役に立ちます。 (あるいは、他の関数と同じように、F#は特定の方法で 'printfn'を扱いますか?) –
文字列のリテラルは、この型に暗黙的に変換できます:http://msdn.microsoft.com/en-us/library/ ee370359.aspxは、魔法の場所です。 – Brian
F#コンパイラは、 'printf'でフォーマットされた文字列と、それらに関連する型の静的解析を特別にサポートしています。 'kprintf'はあなた自身の関数でそれを利用するための標準的な方法です。 – yamen