我用 scala 编写了以下代码,我想通过删除 if else 语句将其转换为函数式方式。
case class Foo(val bar:String)
val foo : Option[Foo] = Some(Foo("mark"))
val bar = if (foo.isDefined) Some(foo.get.bar) else None
我们可以在 scala 中尝试模式匹配吗?需要您的指导。
这里不需要使用模式匹配。
val bar = foo.map(_.bar)
这应该会给你预期的结果
我认为值得注意的是,
if
表达式没有什么“非功能性”。请注意,我没有说“声明”:if
声明需要依赖副作用才能发挥作用。像 C 和 Java 这样的语言有 if
语句,并且有一个 三元运算符,允许将条件作为表达式进行计算,这意味着它会产生结果。 Scala 中的情况并非如此:if
是一个表达式,您实际上在代码中利用了这一点,将条件的结果分配给 bar
。话虽如此,你可以使用模式匹配,但在这种情况下我认为你可以使用map
来表达上面
if
的逻辑,如下例所示:case class Foo(val bar:String)
val foo : Option[Foo] = Some(Foo("mark"))
val bar = if (foo.isDefined) Some(foo.get.bar) else None
val barMap = foo.map(_.bar)
assert(bar == barMap)
您可以在Scastie 上使用此代码