首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala中的自动类型参数推理

scala中的自动类型参数推理
EN

Stack Overflow用户
提问于 2016-12-13 11:02:57
回答 2查看 141关注 0票数 1

我试图实现一个类似于:

代码语言:javascript
复制
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的调用不编译,因为编译器不能推断类型参数AB。错误:missing parameter type

基本上,我希望它能推断出A (Int)给定的论点List(1,13,42),然后从给定的f = _*2知情A推断B。但事实并非如此。

我能做什么来避免写类型参数呢?

我发现的最好的是:

代码语言:javascript
复制
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参数中显式地给出了f

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-13 11:27:38

使用多参数列表。

代码语言:javascript
复制
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)

对于foldLeft和类似的函数,集合api大量使用了这种风格。您可以查看正式风格指南这里。

票数 7
EN

Stack Overflow用户

发布于 2016-12-13 11:14:22

我找到了一种方法,使用隐式类:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41119496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档