我尝试实现类似于:
的功能set-number
但是对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
(Int)给出参数A
然后从给定List(1,13,42)
知道B
推断f = _*2
。但事实并非如此。
我该怎么做才能避免编写类型参数?
我找到的最好的是:
A
即。我明确地在def myMap[A,B](a: Seq[A], f: A => B): Seq[B] = a.map(f)
myMap(List(1,13,42), (a: Int) => a*2)
参数
A
答案 0 :(得分:7)
使用多个参数列表。
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.
答案 1 :(得分:0)
我找到了一种方法,使用隐式类:
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)