出于好奇,我想知道是否可以执行以下操作:
def myMethod(
a: Option[A] = None,
b: Option[B] = None,
...
z: Option[Z] = None
): Something = {
...
}
Run Code Online (Sandbox Code Playgroud)
我想要的是不必这样称呼它:
myMethod(
b = Some(newB),
m = Some(newM)
)
Run Code Online (Sandbox Code Playgroud)
而是能够做到myMethod(b = newB, m = newM)而不必总是转换A为Some(a).
是否可以 ?
我有以下内容case class:
case class Example[T](
obj: Option[T] | T = None,
)
Run Code Online (Sandbox Code Playgroud)
Example(myObject)这使我能够像而不是那样构建它Example(Some(myObject))。
要使用 obj,我需要将其标准化为Option[T]:
lazy val maybeIn = obj match
case o: Option[T] => o
case o: T => Some(o)
Run Code Online (Sandbox Code Playgroud)
the type test for Option[T] cannot be checked at runtime
我尝试过TypeTest,但也收到警告 - 或者我发现的解决方案看起来非常复杂 - 请参阅/sf/answers/4872566401/
在Scala 3中是否有更好的方法来实现这种模式?