如何避免 Scala 中的可变局部变量?

djo*_*dal 2 scala immutability

在 Scala 中避免使用可变变量被认为是一种很好的做法。

来自“在 Scala 中编程,第 2 版”,第 52 页:“Scala 允许您以命令式风格进行编程,但鼓励您采用更函数式的风格”和后来的“Scala 鼓励您倾向于使用 vals,但最终达到手头工作的最佳工具。”

你如何在 Scala 中使这个命令式构造优雅(关注变量count):

var count = 0
val foo  = getRequest()
if(foo.isJsonObject){
  count = doSomething(foo)
}
if(count>0){
  specialCall()
} else{
  defaultCall()
}
Run Code Online (Sandbox Code Playgroud)

您使用什么构造或模式将命令式风格的代码转换为函数式风格?您是否使用 Option 类或其他一些结构?

ale*_*bit 5

不确定您是否提供了足够的上下文,但是关于:

val foo  = getRequest()
val count = if (foo.isJsonObject) doSomething(foo) else 0
if (count > 0) {
  specialCall()
} else {
  defaultCall()
}
Run Code Online (Sandbox Code Playgroud)

通常情况下,一般的Scala API(集合,OptionTryFuture,等)和它们的操作(mapflatMapfilterfold,等),让您表达最命令式结构相当简洁。