Похоже, вам нужен Option :
class ModelManager{
def getModel(model: String) = model match {
case "menu" => Some(classOf[Menu])
case "articles" => Some(classOf[Articles])
case _ => None
}
def deleteInstance(model:String, uid: Long) =
getModel(model) map { m =>
Model.all(m).filter("uid", uid).get().delete()
} getOrElse false
}
Вы можете думать о Option как о контейнере, который может содержать не более одного элемента.Опция, которая содержит элемент x
, равна Some(x)
.Пустой параметр - None
.В Option есть несколько полезных методов, включая методы map
и getOrElse
, использованные выше.
Метод map
применяет функцию к каждому элементу «контейнера».Конечно, если контейнер None
, он ничего не делает (кроме, возможно, изменения статического типа Option).В вашем случае (при условии, что delete
возвращает логическое значение), метод карты изменит Option [Class] на Option [Boolean].
Метод getOrElse
возвращает элемент опции, если таковой имеется, и в противном случае возвращает значение по умолчанию (в данном случае false
).
Обратите внимание, что вы также можете упростить реализацию, используя метод condOpt
, определенный в PartialFunction :
class ModelManager{
def getModel(model: String) = condOpt(model) {
case "menu" => classOf[Menu]
case "articles" => classOf[Articles]
}
def deleteInstance(model:String, uid: Long) =
getModel(model) map { m =>
Model.all(m).filter("uid", uid).get().delete()
} getOrElse false
}