Scala 中的自动类型参数推断
Automatic type-argument inference in scala
我试图实现类似于以下的功能:
def myMap[A,B](a: Seq[A], f: A => B): Seq[B] = a.map(f)
// then I want to call it like that:
myMap(List(1,13,42), _*2)
但是对 myMap
的调用无法编译,因为编译器无法推断类型参数 A
和 B
。错误:missing parameter type
基本上,我希望它能推断出 A
(Int) 给定的参数 List(1,13,42)
,然后从给定的 f = _*2
知道 A
推断出 B
。但事实并非如此。
我该怎么做才能避免写类型参数?
我找到的最好的是:
def myMap[A,B](a: Seq[A], f: A => B): Seq[B] = a.map(f)
myMap(List(1,13,42), (a: Int) => a*2)
即我在 f
参数
中明确给出 A
我找到了一种方法,使用隐式 class:
implicit class MyMap[A](a: A) {
def myMap[B](f: A => B): B = f(a)
}
// then I can call
List(1,13,42).myMap(_*2)
使用多个参数列表。
def myMap[A,B](a: Seq[A])(f: A => B): Seq[B] = a.map(f)
// then call it like this:
myMap(List(1,13,42)) (_*2)
集合 api 大量使用这种风格 foldLeft
和类似的功能。
你可以查看官方风格指南here.
我试图实现类似于以下的功能:
def myMap[A,B](a: Seq[A], f: A => B): Seq[B] = a.map(f)
// then I want to call it like that:
myMap(List(1,13,42), _*2)
但是对 myMap
的调用无法编译,因为编译器无法推断类型参数 A
和 B
。错误:missing parameter type
基本上,我希望它能推断出 A
(Int) 给定的参数 List(1,13,42)
,然后从给定的 f = _*2
知道 A
推断出 B
。但事实并非如此。
我该怎么做才能避免写类型参数?
我找到的最好的是:
def myMap[A,B](a: Seq[A], f: A => B): Seq[B] = a.map(f)
myMap(List(1,13,42), (a: Int) => a*2)
即我在 f
参数
A
我找到了一种方法,使用隐式 class:
implicit class MyMap[A](a: A) {
def myMap[B](f: A => B): B = f(a)
}
// then I can call
List(1,13,42).myMap(_*2)
使用多个参数列表。
def myMap[A,B](a: Seq[A])(f: A => B): Seq[B] = a.map(f)
// then call it like this:
myMap(List(1,13,42)) (_*2)
集合 api 大量使用这种风格 foldLeft
和类似的功能。
你可以查看官方风格指南here.