【问题标题】:Deriving higher-order function in Scala在 Scala 中导出高阶函数
【发布时间】:2016-02-03 06:13:28
【问题描述】:

有两种非常相似的方法,我试图在 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)
        }
    

我怎样才能使它成为一个高阶函数?

【问题讨论】:

  • 你不必用你的名字签名,因为它会自动出现在你帖子的右下角。
  • 有专门的Code Review 论坛。您可能会在那里收到更多回复。

标签: scala higher-order-functions


【解决方案1】:

例如

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)

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多