是的,作者说不需要指定它a是BooleaninmyMethod({a => true})因为类型是Boolean => Boolean
==原始答案使第一位编译但有点错过了==
它需要用 键入[A,B]。
def myMethod[A,B](functionLiteral: A => B): Unit = {}
myMethod((arg:String) => arg.length)
myMethod((arg:Int) => (1 to arg).map(_ *2))
我修改它以返回函数,以便您可以看到 repl 中的类型。
scala> def myMethod[A,B](functionLiteral: A => B): A => B = functionLiteral
myMethod: [A, B](functionLiteral: (A) => B)(A) => B
scala> myMethod((arg:String) => arg.length)
res11: (String) => Int = <function1>
scala> res11("hello world!")
res12: Int = 12
scala> myMethod((arg:Int) => (1 to arg).map(_ *2))
res13: (Int) => scala.collection.immutable.IndexedSeq[Int] = <function1>
scala> res13(4)
res14: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8)