Переводчик Scala не может найти мой класс? - PullRequest
2 голосов
/ 22 октября 2011

Я пытаюсь загрузить файл Scala внутри интерпретатора:

trait MyOrdered {
  def <(that: MyInt):Boolean = compare(that) < 0
  def >(that: MyInt):Boolean = compare(that) > 0
  def <=(that: MyInt):Boolean = compare(that) < 0 || this == that
  def >=(that: MyInt):Boolean = compare(that) > 0 || this == that
  def compare(that: MyInt): Int
}

class MyInt(val value: Int) extends MyOrdered {
  def compare(that: MyInt) =
    if (this.value < that.value) -1 
    else if (this.value == that.value) 0
    else 1
}


object App extends Application{
  val a = new MyInt(2)
  val b = new MyInt(4)
  println(a < b)
  println(a > b)
}

Но я получаю глупую ошибку:

Loading traits.scala...
<console>:8: error: not found: type MyInt
         def <(that: MyInt):Boolean = compare(that) < 0
                     ^
<console>:12: error: not found: type MyInt
         def compare(that: MyInt): Int

Как я могу заставить интерпретатора узнать MyInt класс, который определяется по дороге?

1 Ответ

5 голосов
/ 22 октября 2011

Я думаю, вы хотите поведение :paste. :load ведет себя так, как будто вы печатаете в интерпретаторе, т.е. он интерпретирует, как только находит закрывающие скобки. Вы можете эмулировать :paste, обернув свой код в некоторый объект, подобный этому:

object Test {
  trait MyOrdered {
def <(that: MyInt):Boolean = compare(that) < 0
def >(that: MyInt):Boolean = compare(that) > 0
def <=(that: MyInt):Boolean = compare(that) < 0 || this == that
def >=(that: MyInt):Boolean = compare(that) > 0 || this == that
def compare(that: MyInt): Int
}

class MyInt(val value: Int) extends MyOrdered {
  def compare(that: MyInt) =
  if (this.value < that.value) -1 
  else if (this.value == that.value) 0
  else 1
}


object App extends Application{
  val a = new MyInt(2)
  val b = new MyInt(4)
  println(a < b)
  println(a > b)
 }
}

Теперь вы можете использовать его как хотите после :load Test.scala и import Test._

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...