【发布时间】:2012-04-01 21:44:54
【问题描述】:
我已经读过 scala 中的 if 语句总是返回一个表达式
所以我正在尝试执行以下操作(伪代码)
sql = "select * from xx" + iif(order.isDefined, "order by " order.get, "")
我正在尝试
val sql: String = "select * from xx" + if (order.isDefined) {" order by " + order.get} else {""}
但我收到此错误:
illegal start of simple expression
order 是一个 Option[String]
我只想为方法添加一个可选参数,如果没有传递该参数(在本例中为顺序),则跳过它
实现我想要做的最惯用的方法是什么?
-- 编辑--
我想我问得太匆忙了
我是这样找到的,
val orderBy = order.map( " order by " + _ ).getOrElse("")
这是正确的做法吗?
我认为地图是为了其他目的......
【问题讨论】:
-
您的代码无法编译的原因是您需要在
if表达式周围加上括号。但正如 Tomasz Nurkiewicz 指出的那样,无论如何都有更好的方法来编写它。 -
有人想评论 为什么 我们需要在 if 表达式周围加上括号(“因为它可以编译”除外)?
-
@LuigiPlinge 这只是推测,但可能是他们想避免程序员混淆
1 + if (b) 2 else 3 + 4这样的表达式如何关联。是1 + (if (b) 2 else 3) + 4还是1 + (if (b) 2 else 3 + 4)?当然,您可以使用一种语法来解决这种歧义(Haskell 确实如此),但这并不意味着人们不会犯错误,因为他们假设了不同的行为。 -
@pelotom 有道理,谢谢
标签: scala scala-option