저는 스칼라에 대해 다소 새로운 것으로, 나를 괴롭히는 작은 문제를 발견했습니다. 의 기본 매개 변수스칼라에서 옵션 값 또는 기본 매개 변수를 사용하는 메서드 호출
def foo(v: Any = "default"): String = s"called with parameter '$v'"
과 옵션 val opt: Option[String]
몇 가지 방법이 있다고 가정 해 봅시다. 옵션 값 (정의 된 경우) 또는 기본 매개 변수 중 하나를 사용하여이 메서드를 호출하는 방법? I 명백한 용액
val result = if (opt.isDefined)
from.here.to.foo(opt.get)
else
from.here.to.foo()
회 (아마도 긴) 오브젝트 체인 방법을 입력 할 필요에도 불구하고 평균? 하나 이상의 옵션/기본 매개 변수 ...
모든 내가 가지고 올 수를 가지고 언급하지 않는 것은 인정 헬퍼입니다
def definedOrDefault[A, B](opt: Option[A], f0: => B, f1: A => B): B =
if (opt.isDefined) f1(opt.get) else f0
하지만 높은 순서로 기본 매개 변수를 언급 할 수없는 경우 기능 ... 그게 전부입니다. 메소드 오버로드로 인해 동일한 문제가 발생하는 Java를 사용하여 나쁜 옛날을 생각 나게합니다.
동일한 의미의 일부를 유지하려면이 경우 "기본"매개 변수를 '없음'으로 설정할 수도 있습니다. – wheaties
그래, 나도 알아 냈어. 그 대답은 진행중인 작업이었습니다 : p –
나는이 방법을 손대지 못하게 할 수있는 해결책을 기대 했었습니다. 그것은 라이브러리의 일부가 될 수 있고 도달 할 수 없었을 것입니다. 그리고 매개 변수를 확인하면 먼저 기능 스타일이 손상됩니다. 그러나 아직도 멋지다! – ABika