【发布时间】:2019-07-23 00:53:55
【问题描述】:
如何运行 refint1 函数?我尝试过var x = new RefInt(5),然后在执行scala> argpass.refint1(x),但在控制台中出现found: RefInt, required : argpass.RefInt => Unit 错误。
object argpass{
class RefInt (initial : Int) {
private var n : Int = initial
def get () : Int = n
def set (m : Int) : Unit = { n = m}
}
def refint1 ( f: RefInt => Unit) : (Int, Int, Int) = {
var x = new RefInt(5)
val first = f(x)
val firstget = x.get
val sec = f(x)
val secget = x.get
val third = f(x)
val thirdget = x.get
(firstget, secget, thirdget)
}
//如何运行 refint1 函数?
【问题讨论】:
-
第一个
f是一个函数,从RefInt到Unit(相当于Java 的void)。因此,您需要传递一个函数,而不是一个值。 - 其次,由于函数返回一个Unit,存储它的结果_(infirst,second&third) 是没有意义的。 - 第三,x,即使在内部被f静音,也不会重新分配,因此它可能(恕我直言)是一个val。 - 最后你可以像这样调用refint1:refint1 { ri => ri.set(i); i += 1 }wherevar i = 0。
标签: scala class reference arguments parameter-passing