Options
을 연결하여 최종 값을 계산하고 싶습니다. 간단합니다 :스칼라 : 로깅 기능이있는 체인 옵션
def compute(aOpt: Option[String], bOpt: Option[String],
cFun: (String, String) => Option[String]): Option[String] = {
for (a <- aOpt; b <- bOpt; c <- cFun(a, b)) yield a + b + c
}
하지만 디버깅 정보를 추가해야합니다 - 누락 된 데이터를 기록하십시오. 그것은 조금 서투른 작동하지만 다음과 같은 코드 :
def compute(aOpt: Option[String], bOpt: Option[String],
cFun: (String, String) => Option[String], logger: Logger): Option[String] = {
if (aOpt.isEmpty) {
logger.error("a is empty")
}
if (bOpt.isEmpty) {
logger.error("b is empty")
}
val cOpt = for (a <- aOpt; b <- bOpt) yield cFun(a,b)
if (cOpt.isEmpty) {
logger.error("c is not found")
}
for (a <- aOpt; b <- bOpt; c <- cOpt) yield a + b + c
}
나는 그것을 달성의 우아하고 관용적 방법을 찾고 있어요.
편집 : 그것은 다음 Option[T]
로에 대한 암시 도우미 클래스를 정의 할 수 있습니다 단지 최초의 "공허함"을 기록 할 수있는 상태인지 이전 버전에서 가끔 두 번
@mjjaniec 당신이 명시 적으로'logger.error' 함수를 전달하기를 원한다면 당신에게 예제를 제공 할 수 있습니다. –