私は、同じ符号化パターンを持ついくつかの機能を持っている:私のコードは少なく、私は機能
private def updateDomainObjectValidationStatus(f1: Long => Option[DomainObject],
parameter1: Long,
f2: DomainObject => Option[DomainObject],
paramter2: String,
valid: Boolean): Option[DomainObject] ={
val somethingMaybe = f1(parameter1)
somethingMaybe match {
case Some(something) =>
f2(
something.copyMe(updatedBy = Some(paramter2),
validationStatus = if(valid) Some(DataEntryValidationStatus.Valid) else Some(DataEntryValidationStatus.Invalid))
)
case None =>
throw new DomainException(s"Object with ID: '$parameter1' doesn't exist")
}
}
などの新しいプライベート関数を記述繰り返し行うために
def updateFooValidationStatus(fooId: Long, user: String, valid: Boolean): Option[Foo] = {
val fooMaybe = fooDao.getFooById(activityId)
fooMaybe match {
case Some(foo) => {
fooDao.update(foo.copy(updatedBy = Some(user),
validationStatus = if (valid) Some(DataEntryValidationStatus.Valid) else Some(DataEntryValidationStatus.Invalid))
)
}
case None =>
throw new DomainException(s"Foo with ID: '$fooId' doesn't exist")
}
}
を
trait DomainObject { ... }
case class Foo(...) extends DomainObject { ... }
しかし、上記の変更により、私はupdateFooValidationStatusの内部でupdateDomainObjectValidationStatusを呼び出すことはできません。 n個の1つのパラメータ興味深いことに
type mismatch, expected (DomainObject) => Option[DomainObject], actual (Foo) => Option[Foo]
上の誤り、それは
(Long) => Option[Foo]
をとり、最初のパラメータ
(Long) => Option[DomainObject]
を文句はありませんScalaでは、コードのデザインになりますどのような慣用的なファッションへ上記のコードを動作させる?ここでは何が起こる
'def'sは機能ではありません、それらのメソッドです – pedrofurla