去掉if else条件,将代码转换为scala中的函数式方式

问题描述 投票:0回答:2

我用 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 中尝试模式匹配吗?需要您的指导。

scala if-statement
2个回答
0
投票

这里不需要使用模式匹配。

val bar = foo.map(_.bar)

这应该会给你预期的结果


0
投票

我认为值得注意的是,

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 上使用此代码

© www.soinside.com 2019 - 2024. All rights reserved.