Scala: неявное преобразование с помощью метода (например, toString) - PullRequest
4 голосов
/ 04 марта 2012

В Scala я бы хотел сделать:

class Identifier(val str: String) {
    override def toString(): String = str
}

class Variable(t: Type, name: Identifier, mutable: Boolean) {
    override def toString(): String = name
}

Но я не могу, потому что Scala неявно не преобразует name в определении Variable#toString() в строку.Есть ли способ, которым это может быть достигнуто?

Для ясности: я не хочу определять дополнительный метод, например:

object Identifier {
    implicit def idToString(x: Identifier): String = x.str
}

Я бы хотел, чтобы метод toString()быть призванным сделать обращение.

Ответы [ 3 ]

6 голосов
/ 04 марта 2012

Попробуйте выполнить явный вызов toString() после вызова имени в Variables методе toString, например:

override def toString() = name.toString()

Здесь вы будете явно вызывать метод, преобразующий Variable в строку, таким образом сообщаякомпилятор именно то, что вы хотите.

.. Если вам не требуется, чтобы метод был неявным ...

1 голос
/ 04 марта 2012

Если вам нужны «странные» способы сделать это, вы можете использовать import import

class Variable(t: Type, name: Identifier, mutable: Boolean) {
  import name.{toString => toStr}
  override def toString(): String = toStr
}

вы не можете сделать import name.toString, поскольку это скрыто всеми другими toString s-методами в Any и т. Д.

0 голосов
/ 04 марта 2012
override def toString(): String = name.toString

не страшно выжимает пальцы

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