Отчасти ответ заключается в том, что вы вводите не то, что действительно запускает интерпретатор Scala.
Это можно увидеть с помощью scala -Xprint:parser
: (Я использую Scala 2.8.1, так чтоучитывает некоторые различия)
scala> a.toString2
[[syntax trees at end of parser]]// Scala source: <console>
package <empty> {
object line2$object extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
object $iw extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
import line0$object.$iw.$iw.a;
object $iw extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
val res0 = a.toString2
}
}
}
}
<console>:7: error: value toString2 is not a member of Int
a.toString2
^
против:
scala> a2.toString
[[syntax trees at end of parser]]// Scala source: <console>
package <empty> {
object line3$object extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
object $iw extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
object $iw extends scala.ScalaObject {
def <init>() = {
super.<init>();
()
};
val res1 = a2.toString
}
}
}
}
<console>:6: error: not found: value a2
a2.toString
^
Сравните выходные данные после обеих строк.Смотрите дополнительную строку в первом бите вывода, который говорит:
import line0$object.$iw.$iw.a;
?Эта дополнительная строка импорта учитывает разницу, которую вы видите в номерах строк.
Так что теперь вам нужен какой-то способ для класса IMain, чтобы сказать вам, сколько вещей он добавил в начало кода перед тем, какошибка.(Это все еще не полностью исправит ситуацию - посмотрите строку ошибки, которую вы получите для g}
)