Я столкнулся с фрагментом кода и не смог понять его. Фрагмент кода:Scala: общий неявный параметр метода
implicit val dummyVisit = Visit("", 1L, 1, 1, 1, 1L)
implicit val dummyOrder = Order("", 1L, 1, 1, 1, 1L)
def process[T](events : Array[T])(implicit t: T):Unit = {
println(t)
if(!events.isEmpty)
t match {
case r: Order => processOrder(events.asInstanceOf[Array[Order]])
case r: Visit => processVisit(events.asInstanceOf[Array[Visit]]);
}
}
def processOrder(arr: Array[Order]): Unit = { println(arr.size) }
def processVisit(arr: Array[Visit]): Unit = { println(arr.size) }
implicit
переменная t
, требует dummyVisit
& dummyOrder
существовать.
Вопрос:
Является ли это правильный способ использования
implicit parameter
?Есть ли лучший способ получить класс-тип
T
без использования неявного параметра?
Implicits ищется с использованием правил неявных разрешений http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits I не понимаете свой вопрос? вы можете вызвать процесс (xs) в массиве либо посещений, либо ордеров. Если соответствующий имплицит не находится в области видимости, процесс (xs) не будет компилировать –
Похож на плохой способ использования полиморфизма или его отсутствия –