2016-02-03 3 views
0

Есть два очень похожих метода, и я пытаюсь извлечь из него более высокоуровневую функцию в Scala.Получение функции более высокого порядка в 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) 
        } 
    

Как я могу сделать эту функцию более высокого порядка?

+0

Вам не нужно подписывать ваше имя, поскольку оно автоматически появляется в правом нижнем углу вашего сообщения. – Jubobs

+0

Имеется специальный форум [Code Review] (http://codereview.stackexchange.com/). Вы можете получить больше ответов там. – 4e6

ответ

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) 
Смежные вопросы