2017-02-24 10 views
1

ちょっと、私は動的変数をできるだけ完全にDart言語のコンソールに表示している関数を探しています。変数をDart言語でコンソールに完全にダンプ/プリントする方法は?

PHPたとえば、変数に関するすべての情報を取得するためにvar_dump()を使用します。

JavaScriptを私は、次のいずれかを実行します:

1)JSONと印刷はconsole.log(JSON.stringify(OBJ)にオブジェクトを変換します)

2)またはカスタム関数のようこの:ダートでしかし

function dump(arr,level) { 
    var dumped_text = ""; 
    if(!level) level = 0; 

    //The padding given at the beginning of the line. 
    var level_padding = ""; 
    for(var j=0;j<level+1;j++) level_padding += " "; 

    if(typeof(arr) == 'object') { //Array/Hashes/Objects 
    for(var item in arr) { 
    var value = arr[item]; 

    if(typeof(value) == 'object') { //If it is an array, 
    dumped_text += level_padding + "'" + item + "' ...\n"; 
    dumped_text += dump(value,level+1); 
    } else { 
    dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n"; 
    } 
    } 
    } else { //Stings/Chars/Numbers etc. 
    dumped_text = "===>"+arr+"<===("+typeof(arr)+")"; 
    } 
    return dumped_text; 
} 

私はprint(variable)をすれば、私はInstance of 'FooBarObject'のような何かを得ます。 JavaScriptのようにオブジェクトをJSONに変換することはできません。これは、すべてのオブジェクトで可能ではないためです。

ので、詳しくは私の質問:

がどこにあるすべて(パブリック)のプロパティを含む未知のタイプ(オブジェクト、配列、など)を持つ変数を印刷するだけでなく、できるダーツで機能やカスタム機能ネストされたオブジェクトと変数を自分のコンソールに追加しますか?または、この機能に最も近いのはどの機能ですか?

答えて

5

このような出力を生成する組み込み関数はありません。

print(variable)プリントvariable.toString()Instance of 'FooBarObject'がデフォルトの実装です。カスタムクラスでオーバーライドして別のものを印刷することができます。

リフレクション(https://www.dartlang.org/articles/libraries/reflection-with-mirrors)を使用すると、インスタンスのすべての種類のプロパティを調べて、必要な方法でプリントする機能を自分で作成できます。 できることはほとんど制限されておらず、デバッグの目的では間違いなく良い選択です。

生産Webアプリケーションの場合は、ツリーシェイキングを真剣に制限し、ビルド出力サイズが顕著に増加するため避けるべきです。 Flutter(モバイル)は反射をまったくサポートしていません。

カスタムクラスにシリアル化を追加してシリアル化された値を簡単に印刷できるJSONシリアル化パッケージの1つを使用することもできます。かなりいい作品例えば は

は、私は他の人があると思いますが、私は通常https://pub.dartlang.org/packages/source_gen

+1

DSONパッケージを使用して自分をロールので、私は、(DIS)の利点について知りません私が反射でカスタムソリューションを試してみると、私はここに感謝の意を表します。 – Blackbam

+1

リフレクションについて多くの質問があります。彼らの大部分はまだ動作するはずです。反射はそれほど変わらなかった。 Webアプリケーション用のプロダクションでリフレクションを使用する場合は、リフレクティブコードをスタティックコードに変換してツリーシェイクを傷つけないようにする 'reflectable'パッケージもあります。 –

関連する問題