首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Scala中为某个函数绕过for & yield?

如何在Scala中为某个函数绕过for & yield?
EN

Stack Overflow用户
提问于 2017-02-15 22:24:43
回答 2查看 58关注 0票数 0

我已经编写了以下Scala代码:

代码语言:javascript
复制
  case class A(x: Int, out: List[Int])

  def isIn: Int => List[Int] => Boolean =
    x => l => l.filter { _ == x }.nonEmpty

  def filterTest4: (Int, List[A]) => List[List[Int]] = (x, a) =>
    for (l <- a; if (isIn(x)(l.out))) yield l.out 

functrion filterTest4运行得很好,但是使用了for & yield,这是我不太喜欢的,因此希望看到另一种方式。如果有人提供建设性的意见/答案,我将非常高兴。请记住,我大概3天前才开始用Scala写东西。

EN

回答 2

Stack Overflow用户

发布于 2017-02-15 22:28:49

我刚刚找到了map函数,它的用法如下:

代码语言:javascript
复制
 def filterTest5: (Int, List[A]) => List[List[Int]] = (x, a) =>
    a.filter { a2 => isIn(x)(a2.out) }.map { a2 => a2.out }

我想这就足够了。

票数 1
EN

Stack Overflow用户

发布于 2017-02-15 23:06:59

或者,按照其他人的建议,您可以使用结合了mapfiltercollect。您还可以对case类进行解构,以直接访问out

代码语言:javascript
复制
def filterTest5: (Int, List[A]) => List[List[Int]] = (x, a) => a.collect {
  case A(_, out) if isIn(x)(out) => out
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42252013

复制
相关文章

相似问题

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