Как определить операции приведения и неявного приведения для моего класса Scala? - PullRequest
2 голосов
/ 07 ноября 2011

Например, я бы хотел, чтобы это работало так, чтобы установить jDName в «Джон Доу» и jDAge в 32:

case class Person(name : String, surname : String, age : Int)

val johnDoe = Person("John", "Doe", 32)

val jDName : String = johnDoe

val jDAge : Int = johnDoe

Могу ли я написать функции в классе Person, чтобы обеспечить неявное преобразование в String, Int и другие (пользовательские) типы? И еще одна вещь для явной операции приведения - тоже интересно, но я не знаю точно, как мне написать это для примера в Scala.

Ответы [ 2 ]

8 голосов
/ 07 ноября 2011

Будет ли это работать?

object Person {
  implicit def pToString(p: Person) = p.name + " " + p.surname + ", age " + p.age
  implicit def pToInt(p: Person) = p.age
}
import Person._
4 голосов
/ 07 ноября 2011

Конечно, поместите их в объект-компаньон.

scala> case class Person(name : String, surname : String, age : Int); object Person {
     |   implicit def pToString(p: Person) = p.name + " " + p.surname + ", age " + p.age
     |   implicit def pToInt(p: Person) = p.age
     | }
defined class Person
defined module Person

scala> val johnDoe = Person("John", "Doe", 32)
johnDoe: Person = Person(John,Doe,32)

scala> val jDName : String = johnDoe
jDName: String = John Doe, age 32

scala> val jDAge : Int = johnDoe
jDAge: Int = 32
...