Scala:隐式转换生成方法值?

时间:2011-10-24 11:36:52

标签: scala reflection pointers

如果我在Scala中有以下类:

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

该类的一个实例

o = new Simple()

是否可以定义一个隐式转换,它会将此实例和编译时已知的方法转换为这样的元组?

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

我希望我能够提出一个注册函数回调的原则:

doThisLater (o -> 'doit)

我在功能上让我的函数回调基于retronym对previous SO question的回答而工作,但是添加这层厚厚的语法糖会很棒。

1 个答案:

答案 0 :(得分:2)

您可以直接扩展该方法。样本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