Я довольно новичок в Scala и наткнулся на небольшую небольшую проблему, которая меня беспокоит. Скажем, есть какой-то метод с параметром по умолчаниюВызов метода с параметром или параметром по умолчанию в Scala
def foo(v: Any = "default"): String = s"called with parameter '$v'"
и Option val opt: Option[String]
. Как вызвать этот метод либо с помощью значения параметра (если определено), либо по умолчанию? То есть, несмотря на очевидное решение
val result = if (opt.isDefined)
from.here.to.foo(opt.get)
else
from.here.to.foo()
и того, чтобы ввести этот метод с (возможно долго) объекта цепи дважды? Не говоря уже о наличии более чем одного дополнительного параметра/по умолчанию ...
Все, что я мог придумать это беспомощному Helper
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