繁体   English   中英

如何使用Scala初始化不可变val而不创建另一个val

[英]how to initialize immutable val with scala without creating another val

我有以下代码:

private def formatQuery(q:String = ""):String = {
  val q2 = if (q=="") "*" else "'%s'".format(q)
  [...]

我只想知道是否有一些惯用的方法来避免声明q2值

有点像

private def formatQuery(
  q:String = if (q=="") "*" else "'%s'".format(q)
):String = {
  [...]

这显然不起作用

您是否有特定原因要避免分配给变量q2 样式本身看起来不错。

您提出的建议显然不起作用,但是这里有两个建议可行。

如果您的原始功能是:

private def formatQuery(q:String = ""):String = {
  val q2 = if (q=="") "*" else "'%s'".format(q)
  doSomething(q2)
}

一种选择是只在要传递q2的地方传递if-else表达式:

private def formatQuery(q:String = ""):String =
  doSomething(if (q=="") "*" else "'%s'".format(q))

另一个是做一个单独的功能:

private def formatQuery(q:String = ""):String =
  runQuery(if (q=="") "*" else "'%s'".format(q))

private def runQuery(q2:String):String =
  doSomething(q2)

第三种方法是模式匹配。

private def formatQuery(q: String = ""): String = q match {
  case _ if q.length == 0 => "*"
  case _ => "'%s'".format(q)
}

我更喜欢您的方式,首先是因为它是好的样式。

可能有一个误解:方法主体内部的val不是封闭类或trait或...的字段,而只是局部变量。 因此,关键字val用于创建字段创建局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM