开发者

How can I obtain Function objects from methods in Scala?

Suppose I have a simple class in Scala:

class Simple {
  def doit(a: String): Int = 42
}
开发者_运维知识库

How can I store in a val the Function2[Simple, String, Int] that takes two arguments (the target Simple object, the String argument), and can call doit() get me the result back?


val f: Function2[Simple, String, Int] = _.doit(_)


same as sepp2k, just using another syntax

val f = (s:Simple, str:String) => s.doit(str)


For those among you that don't enjoy typing types:

scala> val f = (_: Simple).doit _
f: (Simple) => (String) => Int = <function1>

Following a method by _ works for for any arity:

scala> trait Complex {                        
     |    def doit(a: String, b: Int): Boolean
     | }                                      
defined trait Complex

scala> val f = (_: Complex).doit _            
f: (Complex) => (String, Int) => Boolean = <function1>

This is covered by a combination of §6.23 "Placeholder Syntax for Anonymous Functions" and §7.1 "Method Values" of the Scala Reference

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜