いカスタマイズの出力をカスタムタイプを使用printf?
-
16-09-2019 - |
質問
を読んでより良好のチャンク 専門F# ものづくりビジョンから実際の応用。なデバッグ、私に慣れた通fsiコマンドはこのようなもの読のreplウィンドウ
fsi.AddPrinter(fun (x : myType) -> myType.ToString())
皆さんこのprintfフォーマッタは思タイプなど
printf "%A" instanceOfMyType
制御出力のためのカスタムタイプです。本書ることができる(頁93,"ジェネリック構造のフォーマットに拡張することができ、任意のユーザー定義のデータ種類 話題のショートパスフィルウェブサイト")ですが、私が見つの参考としてどのように実際に達成。なんだろうけど、日本人にいかがですか?でも可能ですか?
編集:
ったものが含まれてサンプルコードで記録タイプが取り扱って、例えば
type myType =
{a: int}
override m.ToString() = "hello"
let t = {a=5}
printfn "%A" t
printfn "%A" (box t)
ト計算書の利回り:
{a = 5;}
解決
のようになるとの付き合い方"について考えるこF#2.0を使用して StructuredFormatDisplay
属性は、例えば:
[<StructuredFormatDisplay("hello {a}")>]
type myType = {a: int}
この例では、デフォルトの代わりに {a = 42;}
, というの取得 hello 42
.
この作品はそのオブジェクトを記録し、ユニオンタイプ。とものパターンのブランド確立の必須要件である形式 "PreText {PropertyName} PostText"
(名目 や PostText ているオプション)により、このよ ToString()
するためには、多くの
PropertyName
可能性のタイプです。ていない場合、文字列、そしているかを確認するとともに、構成設定します。 わからないSymeのブログ たとえば再帰的にフォーマットをツリーになります。で算出します。ですから、一緒に試してみましょう
ToString()
仕事の記録とユニオンの種類もかなりプラス方法:[<StructuredFormatDisplay("{AsString}")>] type myType = {a: int} override m.ToString() = "hello" member m.AsString = m.ToString() // a property that calls a method
ちなみに、 ToString()
常に使用するものの記録とユニオン種お問い合わせいただいた場合 printfn "%O"
の代わりに printfn "%A"
.
他のヒント
うーん...私は漠然とこれにいくつかの変更を思い出すが、彼らはCTP(1.9.6.2)の前または後に起こった場合、私は忘れています。
は、いずれの場合も、CTPに、私は見ている。
type MyType() =
override this.ToString() = "hi"
let x = new MyType()
let xs = Array.create 25 x
printfn "%A" x
printfn "%A" xs
VFSIウィンドウで評価ときに私が望むものを行い、その
x;;
xs;;
もきれいに印刷されます。だから、私は、私はこれが希望されているものとどのように異なるかは不明だと思う?
あなたはToStringメソッドをオーバーライドする場合、それは行う必要があります。