Scala 什么是「;斯卡拉“;写这段代码的方法

Scala 什么是「;斯卡拉“;写这段代码的方法,scala,coding-style,Scala,Coding Style,我有一个涉及java的scala代码: val message = "Our servers encountered an error" + (if (ex.getMessage == null) "" else (": " + ex.getMessage)) scala的最佳编写方式是什么?可能是以下几点: val exMessage = Option(ex.getMessage).fold("")(m =>s": $m") val message = s"Our servers e

我有一个涉及
java
的scala代码:

val message = "Our servers encountered an error" + 
(if (ex.getMessage == null) "" else (": " + ex.getMessage))

scala的最佳编写方式是什么?

可能是以下几点:

val exMessage = Option(ex.getMessage).fold("")(m =>s": $m")
val message = s"Our servers encountered an error$exMessage"
或者在一行中:

s"Our servers encountered an error${ Option(ex.getMessage).fold("")(m =>s": $m") }"
不过,这不是最有效的方法。这也不会让你的代码更清晰

编辑:

如果
ex,getMessage
返回一个空的
字符串,这可能会(以及原始的)产生一个不想要的结果

此外,如前所述,在这种情况下使用
选项
是混淆代码的好方法。下面是一个更具可读性的示例:

def errorMessage(ex: Throwable): String= {
  val formattedMsg = ex.getMessage match {
    case msg: String if msg.nonEmpty => s": $msg"
    case _ => ""
  }

  s"Our servers encountered an error$formattedMsg"
}

大概是这样的:

val exMessage = Option(ex.getMessage).fold("")(m =>s": $m")
val message = s"Our servers encountered an error$exMessage"
或者在一行中:

s"Our servers encountered an error${ Option(ex.getMessage).fold("")(m =>s": $m") }"
不过,这不是最有效的方法。这也不会让你的代码更清晰

编辑:

如果
ex,getMessage
返回一个空的
字符串,这可能会(以及原始的)产生一个不想要的结果

此外,如前所述,在这种情况下使用
选项
是混淆代码的好方法。下面是一个更具可读性的示例:

def errorMessage(ex: Throwable): String= {
  val formattedMsg = ex.getMessage match {
    case msg: String if msg.nonEmpty => s": $msg"
    case _ => ""
  }

  s"Our servers encountered an error$formattedMsg"
}

在scala中,您不想处理null,使用选项更方便

 "Our servers encountered an error while processing your request " +
 Option(ex.getMessage).map(":"+_).getOrElse("")

在scala中,您不想处理null,使用选项更方便

 "Our servers encountered an error while processing your request " +
 Option(ex.getMessage).map(":"+_).getOrElse("")

如果ex.getMessage可以返回,则必须处理“null”。在这种情况下,隐藏它只会掩盖正在发生的事情。“我认为原件很好。@Paul虽然,我同意你的观点,原件很好,但我必须说,如果这是一个仅用于处理
null
返回值
ex.getMessage
的格式化程序,而隐藏
null
似乎并没有多大危害。就是这个选项。apply+map+getOrElse是一个大量的机器来测试null。需要更多的思考才能看到代码在做什么。从这个意义上讲,我认为如果ex.getMessage可以返回“null”,则必须处理它是有害的。在这种情况下,隐藏它只会掩盖正在发生的事情。“我认为原件很好。@Paul虽然,我同意你的观点,原件很好,但我必须说,如果这是一个仅用于处理
null
返回值
ex.getMessage
的格式化程序,而隐藏
null
似乎并没有多大危害。就是这个选项。apply+map+getOrElse是一个大量的机器来测试null。需要更多的思考才能看到代码在做什么。从这个意义上说,我认为这是有害的,我认为这远没有原来那么清楚。这对我来说很好
“我们的服务器遇到了一个错误”+{val m=ex.getMessage;if(x==null | | x.isEmpty)““else m}:)
,尽管匹配/大小写也很好。我认为这远没有原来的那么清楚。这对我来说很好
“我们的服务器遇到了一个错误”+{val m=ex.getMessage;if(x==null | | x.isEmpty)”“else m}:)
,尽管匹配/大小写也很好。尽管在Scala中不鼓励使用null,但如果使用返回null的API,则必须处理null。因为您的代码可以立即处理它,所以我认为它很好,并且与其他任何东西一样是“scala方式”。当然,您可以将其包装在一个选项中作为其他答案,但为什么,如果您要做的只是立即将其展开。虽然在Scala中不鼓励使用null,但如果您使用的是返回null的API,则必须处理null。因为您的代码可以立即处理它,所以我认为它很好,并且与其他任何东西一样是“scala方式”。当然,你可以把它包装成一个选项,作为你的其他答案,但为什么,如果你要做的就是立即打开它。