【问题标题】:Scala Higher order functions in detailsScala高阶函数详解
【发布时间】:2016-07-06 14:17:14
【问题描述】:

我正在学习 Scala 高阶函数。我正在学习an example那是一门课;有一种方法接收一个函数和一个值参数并返回一个值。函数为p: Tweet => Boolean,方法实现如下。我想知道p函数的实现在哪里。

class NonEmpty(elem: Tweet, left: TweetSet, right: TweetSet) extends TweetSet {
  def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {
    if (p(elem)) {
      left.filterAcc(p, acc.incl(elem))
      right.filterAcc(p, acc.incl(elem))  
    } else {
        left.filterAcc(p, acc)
        right.filterAcc(p, acc)
    }                    
}

【问题讨论】:

  • 我知道当参数是函数时可能会更令人不安,但您的问题实际上与“acc 参数的值是多少?”完全相同。当调用filterAcc 时,它是作为acc 传递的任何内容。 p 也一样。

标签: scala higher-order-functions


【解决方案1】:

不知道p函数的实现在哪里

如果您进一步了解类定义,您会在union 中看到p 的实现之一

def union(that: TweetSet): TweetSet = {
  this.filterAcc(elem => true, that)
}

对于高阶函数,方法的调用者负责提供他希望运行的函数的实现。您可以查看 Scalas 集合库上的常见用例,例如 mapflatMapfilter 等。

【讨论】:

  • 那么对于联合函数内部的filterAcc函数,所有p(elem)都会返回true吗?不管哪个元素是?
  • @FelipeOliveiraGutierrez 是的,专门针对该功能。你可以提供任何你想要的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
相关资源
最近更新 更多