如何在闭包上声明清单

时间:2014-10-10 14:03:48

标签: scala

是否可以在闭包

上声明清单

而不是

def extract[A](v:JValue)(implicit m: Manifest[A]) : A = v.extract[A]

之类的东西?

def extract[A] = (v: JValue) => v.extract[A]

1 个答案:

答案 0 :(得分:1)

这声明了方法的清单,该方法返回函数,返回特定类型的函数:

def extract[A](implicit m: Manifest[A]) = (v: JValue) => v.extract[A]

除此之外不可能有两个原因:

  1. scala函数不同于不支持参数多态的方法 - 没有像

    那样的东西

    [A](v: JValue) => (m: Manifest[A]) => v.extract[A]

  2. scala函数与方法不同,不支持隐式参数。虽然这是公认的语法:

    { implicit manifest: Manifest[String] => v.extract[String] }

    隐含在这里确实有不同的含义:它使值manifest可用于函数体内的隐式解析,但在调用函数时无效(您必须明确提供清单)< / p>