我有以下代码:
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 = {
[...]
显然不起作用
答案 0 :(得分:4)
您是否有特殊原因试图避免分配给变量q2
?风格本身似乎很好。
你提出的建议显然不起作用,但这里有两个可行的建议。
如果您的原始功能是:
private def formatQuery(q:String = ""):String = {
val q2 = if (q=="") "*" else "'%s'".format(q)
doSomething(q2)
}
一种选择是只传递if-else表达式,然后传递q2
:
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)
答案 1 :(得分:2)
第三种方式是模式匹配。
private def formatQuery(q: String = ""): String = q match {
case _ if q.length == 0 => "*"
case _ => "'%s'".format(q)
}
我更喜欢你这样做的方式,首先是因为它风格很好。
答案 2 :(得分:1)
可能存在一个误解:方法体内的 val 不是封闭类或特征或......的字段,但它只是一个局部变量。因此关键字 val 用于创建字段和以创建局部变量。