次のように、破壊割り当てを使用して、タプルの要素をその場で交換することを考えました。
var a = [1,2];
[a[1], a[0]] = a;
ただし、これにより が得られ[1, 1]
ます。
Babel はこれを次のようにコンパイルします。
a[1] = a[0];
a[0] = a[1];
これは次のようにコンパイルする必要があると思っていたでしょう
let tmp0 = a[0];
let tmp1 = a[1];
a[0] = tmp1;
a[1] = tmp0;
Traceur は、babel と同じように動作します。だから私はこれが指定された動作だと思いますか?
2 つの要素をその場で交換したい。唯一の方法です...
let tmp = a[0];
a[0] = a[1];
a[1] = tmp;
しかし、上記のことは、破壊的な代入が私がしなければならないことを回避できるはずのものだと思いました。
私は配列の 2 つの要素の順序を完全に逆にすることができるので、それは私の質問ではありません。のような単純なことを行うことができますa.push(a.shift())
。これは、スワッピングがインプレースであるという基準を満たしています。
ここで私が最も興味を持っているのは、なぜ分解が本来あるべきように機能しないのかということです。