| [#689] | project: compiler | priority: high | category: missing feature | |
|---|---|---|---|---|
| submitter | assigned to | status | date submitted | |
| Burak | Martin | won't fix | 2006-08-03 18:03:06.0 | |
| subject | confusing constructors | |||
| code |
package fk
case object ParseException extends Throwable {}
class RexParser(input: Iterator[char]) {
init()
var ch = '%'; // illegal character that we *should* never see
def next: char = {
if(input.hasNext)
do {
ch = input.next;
System.out.println("'"+ch+"'"); // DEBUG
} while (Character.isWhitespace(ch));
System.out.println("meet this cute character, ch = "+ch); // DEBUG
return ch;
}
def init(): this.type = {
System.out.println("init()");
this.next;
System.out.println("after init() ch is now ch == '"+ch+"'");
this;
}
def nextEvent: Object = {
System.out.println("nextEvent(), ch = "+ch); // DEBUG
if (Character.isJavaIdentifierStart(ch)) {
Console.println(1); System.exit(-1); null
} else {
System.out.println("huh? I don't like this character ch == '"+ch+"'");
throw ParseException
}
}
}
object fk {
def main(args:Array[String]) = {
val z:Seq[Char] = "port['int']"
val p = new RexParser(z.elements)
p.nextEvent
}
}
|
|||
| what happened | Just because the call to |
|||
| what expected | either (1) all field assignments be done before methods are called in the constructor, or (2) warnings that side-effects of method called from the constructor might be undone by subsequent assignments. | |||
| [back to overview] | ||||
| Martin edited on 2006-08-14 16:43:28.0 |
| I agree that this is a trap. But it does not have an easy fix. Note that Scala and Java's behavior are exactly the same in this case. Why does it not have an easy fix: "either (1) all field assignments be done before methods are called in the constructor" what if a field assignment involes a method call? "or (2) warnings that side-effects of method called from the constructor might be undone by subsequent assignments." This might be worth it, but ot would require a complicated and necessary incomplete flow analysis. |