Yeah, that makes sense. I agree. Thanks.
Nathan > > On 9 December 2012 15:04, Nathan Wall <nathan.w...@live.com> wrote: > >> The problem is that imports are not normal variable assignments. They > >> do not copy values, like normal destructuring, they are aliasing > >> bindings! If you were to allow arbitrary expressions and patterns, > >> then this would imply aliasing of arbitrary object properties. Not > >> only is this a completely new feature, it also is rather questionable > >> -- the aliased location might disappear, because objects are mutable. > > > > Could it be structured so that using `export` directly on a variable > > exported the alias, while using `import { x: [ a, b ] } from A; ` was > > basically just sugar for `import { x } from A; let [ a, b ] = x;` so that a > > and b copied not aliased? > > That's what I referred to when I wrote: > > > You could arguably make this saner by interpreting nested patterns in > > an import as copying, not aliasing, but I think mixing meanings like > > that would be rather confusing and surprising. > > So yes, you could do that, but no, I don't think it is a good idea. > Your example: > > > import { x: { a, b }, f } from A; > > f(); > > print(a); // 1 > > print(b); // 2 > > > > ... > > > > import { x, f } from A; > > f(); > > print(x.a); // 3 > > print(x.b); // 4 > > demonstrates perfectly how it violates the principle of least surprise > and can potentially lead to subtle bugs, especially when refactoring. > One overarching principle of destructuring should be that all > variables in one binding are treated consistently. > > /Andreas
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss