我对 Scala 还很陌生,偶然发现了一个一直困扰我的小问题。假设有一些带有默认参数的方法
def foo(v: Any = "default"): String = s"called with parameter '$v'"
和一个选项val opt: Option[String]
。如何使用选项值(如果已定义)或默认参数调用此方法?我的意思是尽管有明显的解决方案
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 的糟糕过去,方法重载会产生同样的问题。