在Scala中派生高阶函数

时间:2016-02-03 06:13:29

标签: scala higher-order-functions

有两个非常相似的方法,我试图在Scala中从中提取更高阶的函数。

  1. 单向:

    def delete(userId: String) = {
      val entries = dao.getEntriesForIds(dao.getXXX(userId))
      dao.deleteRef(entries, userId)
    }
    
  2. 另一种方式:

    def delete(userId: String) = {
      val entries = dao.getEntriesForIds(dao.getXXX(userId))
                        .filter(_.actorId != userId)
      dao.deleteRef(entries, userId)
    }
    
  3. 我的重构版本,它似乎不是一个更高阶的函数:

    def delete(userId: String, **filter: Boolean**) = {
          val entries = dao.getEntriesForIds(dao.getXXX(userId))
          **if (filter)**
              entries.filter(_.actorId != userId)
          dao.deleteRef(entries, userId)
        }
    
  4. 如何使其成为更高阶的功能?

1 个答案:

答案 0 :(得分:2)

E.g。

def delete(userId: String, predicate: Entry => Boolean) = {
  val entries = dao.getEntriesForIds(dao.getXXX(userId)).filter(predicate)
  dao.deleteRef(entries, userId)
}

// use 1
delete(userId, _ => true)

// use 2
delete(userId, _.actorId != userId)