2015-12-13 1 views
1

Как передать неявные параметры при создании функциональных объектов в значении?Scala создание функциональных объектов с использованием неявных параметров

Этот код не может быть скомпилирован.

case class Cache(key: Int, value: String) 

trait Processor { 
    val process = processF _ // error: could not find implicit value for parameter cache: Cache 

    private def processF()(implicit cache: Cache): String = cache.value 
} 

object Main extends App with Processor { 
    implicit val cache = Cache(10, "hello") 

    process() 
} 

Я ожидаю, чтобы сделать что-то вроде этого:

val process:()(implicit cache: Cache) => String = processF _ // syntax error 

Или есть какие-либо доступные подходы?

ответ

0

В отличие от методов, объекты-объекты не могут иметь неявные параметры.

Я думаю

// in Processor 
def process(implicit cache: Cache) =() => processF() 

// in Main 
process.apply() 
// or 
val process1 = process 
process1() 

расположен ближе всего к тому, что вы хотите. Альтернативно,

trait Processor { 
    implicit val cache: Cache 

    val process = processF _ // error: could not find implicit value for parameter cache: Cache 

    private def processF(): String = cache.value 
} 
+0

Спасибо, в обоих случаях мне помогли :) – ryochin

Смежные вопросы