Вопрос

Следующие строки работают, когда я ввожу их вручную на Scala REPL (2.7.7):

trait myTrait {
  override def toString = "something"
}
implicit def myTraitToString(input: myTrait): String = input.toString
object myObject extends myTrait
val s: String = myObject

Однако, если я пытаюсь скомпилировать файл с ним, я получаю следующую ошибку:

[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error]          ^

Почему?

Спасибо!

Это было полезно?

Решение

Функции не могут быть определены на верхнем уровне. Помещать myTraitToString В (компаньон, если хотите) объект:

object myTrait {
    implicit def myTraitToString(input : myTrait) : String = input.ToString
}

А затем принести его в область применения:

import myTrait._

Всякий раз, когда MytraittoString находится в области применения - то есть, когда вы можете назвать это без каких-либо точек - оно будет применено неявно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top