2017-05-23 29 views
-1

function(x: Tarray<String>)function(x: array of string)の違いは何ですか?それぞれのバリアントには何が欠点ですか?機能(x:Tarray <String>)と機能(x:文字列の配列)の違い

+0

ジェネリックス=より多くのメモリ使用量(exe領域)と一般的に低速です。両方ともあなたの例では柔軟ですが、オープンアレイの方法をお勧めします。 –

+5

@RaffaeleRossi間違っている、「TArray 」は単純なタイプのdefです。間違ったフッドを広げてはいけない。 –

答えて

9

最初は動的配列パラメータ、2番目はopen arrayパラメータです。

オープン配列パラメータは、通常、あなたがちょうどそうのような角括弧内の値を渡すに利益を与える:

foobar([x, y, z]); 

XE7ので、あなたももう少しオーバーヘッドで動的配列をそのように初期化することができます。最終的には、あなたが値を使って何をしているかによって異なります。それらを格納していない場合は、オープン配列のパラメータで十分です。ただし、値を配列に格納する場合は、配列を動的配列パラメーターに割り当てるだけではなく、値をコピーする必要があります。

ダイナミックアレイとオープンアレイパラメータの構文は同じですが(array of X)、両方向での割り当て互換性はありません(ダイナミックアレイはオープンアレイパラメータに渡すことしかできませんが、オープンアレイパラメータ動的配列変数にあなたはRTTIを経由して呼び出したいメソッドにオープン配列パラメータを使用している場合、あなたが考慮すべき

一つのこと - 。RTTIは、それらを適切に処理していないため、動作しません - RSP-16317を参照してください

さらに、TArray<X>は、明示的に宣言された配列タイプのうち、はTXArrayには対応しませんが、TArray<T>に対応するか、TXArray = TArray<T>というエイリアスは常にタイプに対応しているため、です。

詳細については、Rudy's excellent article about open array parametersを参照してください。

+0

Heheh、私はあなたの最後の行を見たときに私の記事を参照するコメントを入力していた。賞賛に感謝します。 –