Scala中作为元组参数的函数

3

我试图表明问题,但结果变得更糟了。我们来看一段复杂的代码。

我正在调用一个函数,如下所示:

mySchedule(config, actorSystem.scheduler.schedule) {
    ...
}

该函数的定义如下:

def mySchedule(config: MyConfig, cb: (FiniteDuration, FiniteDuration) => (=> Unit) => Cancellable)(f : => Unit) = {
    val initialDelay = ...
    val interval = ...
    cb(initialDelay, interval)(f)
}

为了进行测试,我愿意做类似以下的事情:

def noop: Unit = {}
val promiseSchedule = Promise[(FiniteDuration, FiniteDuration, => Unit)]()
mySchedule(
   config,
   {... promiseSchedule.success((initialDelay, interval, f))}
)(noop)

promiseSchedule.future.value must be_==(...)

我该如何使这个工作起来?


将其改为 Unit => Unit 而不是 Unit - Dima
6
不要把它变成 Unit => Unit,而是要变成 () => Unit。 第一个是接受一个无用参数的 Function1[Unit,Unit],而第二个是无参函数的 Function0[Unit] - ghik
2个回答

3

请尝试:

def noop(): Unit = {}
val promiseSchedule = Promise[(Int, () => Unit)]()
// ...
promiseSchedule.success((1, noop))

由于在元组(就像在 case class 中一样),构造函数的所有成员都是 val,所以这是原因。
并且不可能将按名称调用存储在 val 中,只能存储它的值或一个函数。

干杯


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接