Details
-
Task
-
Resolution: Unresolved
-
P2: Important
-
None
-
None
Description
Currently, it's rather cumbersome to tell the QML compiler that a local value in a function will always have the same type. You need to as-cast whenever you assign null or something that cannot be statically proven to be of the required type. Type assertions on locals would come in handy here.
Case in point:
property Variable prev property Variable first property Variable last function chainTest(n: int) { planner = newPlanner.createObject(null) as Planner; prev = null; first = null; last = null; // Build chain of n equality constraints for (var i = 0; i <= n; i++) { var name = "v" + i; var v = newVariable.createObject(null, {name: name}) as Variable; if (prev != null) newEqualityConstraint.createObject(null, {v1: prev, v2: v, strength: Strength.REQUIRED}); if (i == 0) first = v; if (i == n) last = v; prev = v; } newStayConstraint.createObject(null, {myOutput: last, strength: Strength.STRONG_DEFAULT}); var edit = newEditConstraint.createObject(null, {myOutput: first, strength: Strength.PREFERRED}) as EditConstraint; var edits = newOrderedCollection.createObject(null) as OrderedCollection; edits.add(edit); var plan = planner.extractPlanFromConstraints(edits); for (var i = 0; i < 100; i++) { first.value = i; plan.execute(); if (last.value != i) // TODO: Bogus compile error! console.error("Chain test failed."); } }
Here, I've factored out the locals into the surrounding object, and it still doesn't help as much as I would hope.