Scala无状态函数

时间:2017-02-26 21:41:50

标签: scala

我做错了什么?例如,这应该返回10:

{ val (get, set) = getAndSet (5); set (10); get () }
val getAndSet : Int => (() => Int, Int => Unit) = {
var s : Int = 0
val get : () => Int = () => {
  val z = s;
  s = s + 1;
  z
}
val set : Int => Unit = (x:Int) => {
  s = x
}
x => (get, set)
}

1 个答案:

答案 0 :(得分:0)

一些错误:

  • n不存在,您可能是s
  • 最后一行应为x => (get, set),但您没有以任何方式使用x

以下是您的代码中修改最少的版本

val getAndSet: Int => (() => Int, Int => Unit) = {
  var s: Int = 0
  val get : () => Int = () => {
    val z = s;
    s = s + 1;
    z
  }
  val set : Int => Unit = (x:Int) => {
    s = x
  }
  x => (get, set)
}

由于您未使用x,您可以选择

val getAndSet: Int => (() => Int, Int => Unit) = _ => {
  var s: Int = 0
  val get : () => Int = () => {
    val z = s;
    s = s + 1;
    z
  }
  val set : Int => Unit = (x:Int) => {
    s = x
  }
  (get, set)
}