Как получить параметр Implicit в область при использовании карри - PullRequest
1 голос
/ 27 февраля 2012

Есть ли способ передать неявный параметр в карри функцию? Я использую грязное исправление (см. Ниже), но это не красиво. Я хотел бы иметь возможность передавать неявную переменную "i" как неявный параметр.

case class myLoaner() {
  implicit val i = "How to get this val into scope within the session function"

  def withCode[T](session: => T): Either[Exception, T] = {
    try {
      Right(session)
    } catch {
      case ex: Exception => {
        Left(ex)
      }
    }
  }
}

object Test {
  def main(args: Array[String]) {
    val r = myLoaner()

    r.withCode {
      implicit val imp = r.i // I want to get rid of this line of code and use the implict val defined above directly
      val h = new Helper
      h.run 
    }
  }

  class Helper {
    def run(implicit i: String) {
      println(i)
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

После val r = myLoaner() вы можете написать

import r.i

или

import r._

, чтобы сделать то, что вы хотите.В качестве альтернативы, вы можете пометить r сам implicit и предоставить это дополнительное определение:

implicit def loanerString(implicit loaner: myLoaner): String = loaner.i

... но теперь немного слишком много импликаций начинает появляться на мой вкус, так что используйте это с умомИногда слишком много скрытой магии вредит читабельности и понятности вашего кода.

0 голосов
/ 28 февраля 2012

Вы всегда можете передать неявные параметры напрямую, например, как h.run(r.i).

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