Scala: неявное преобразование для генерации значений метода? - PullRequest
0 голосов
/ 24 октября 2011

Если у меня есть следующий класс в Scala:

class Simple {
  def doit(a: String): Int = 42
}

И экземпляр этого класса

o = new Simple()

Возможно определить неявное преобразование, которое преобразует этот экземпляр, иметод, известный при компиляции в кортеж, подобный этому?

Tuple2 (o, (_: Simple).doit _)

Я надеялся, что смогу найти такой метод для регистрации обратных вызовов функций в духе:

doThisLater (o -> 'doit)

У меня функционально есть мойобратные вызовы функций работают на основе ответа ретронима на предыдущий вопрос SO , но было бы здорово добавить этот толстый слой синтаксического сахара.

1 Ответ

2 голосов
/ 24 октября 2011

Вы можете просто расширить этот метод.Пример сеанса REPL,

scala> case class Deferred[T, R](f : T => R)
defined class Deferred

scala> def doThisLater[T, R](f : T => R) = Deferred(f)
doThisLater: [T, R](f: T => R)Deferred[T,R]

scala> val deferred = doThisLater(o.doit _)  // eta-convert doit
deferred: Deferred[String,Int] = Deferred(<function1>)

scala> deferred.f("foo")
res0: Int = 42
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...