Как получить объект определенного типа и привести его к нему в Scala? - PullRequest
2 голосов
/ 11 октября 2010

Например,

GeneralType - это класс или признак, расширенный многими более конкретными типами, включая, скажем, SpecificType.

Функция принимает аргумент типа GeneralType, а затем whant'sне знаю, является ли фактический переданный аргумент экземпляром SpecificType и, если он есть, действует соответствующим образом (используйте его специальные поля / методы).

Как кодировать это в Scala 2.8?

Ответы [ 3 ]

3 голосов
/ 11 октября 2010

Одним словом ... "Сопоставление с образцом":

def method(v : Vehicle) = v match {
  case l : Lorry      => l.deliverGoods()
  case c : Car        => c.openSunRoof()
  case m : Motorbike  => m.overtakeTrafficJam()
  case b : Bike       => b.ringBell()
  case _ => error("don't know what to do with this type of vehicle: " + v)
}
2 голосов
/ 11 октября 2010

Поместите этот скрипт в файл:

trait GeneralType

class SpecificType extends GeneralType

def foo(gt: GeneralType) {
  gt match {
    case s: SpecificType => println("SpecificT")
    case g: GeneralType => println("GeneralT")
  }
}

val bar = new AnyRef with GeneralType
val baz = new SpecificType()

foo(bar)
foo(baz)

Запустите скрипт:

scala match_type.scala 
GeneralT
SpecificT
0 голосов
/ 11 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...