参数列表中的一个参数引用另一个参数

One argument referencing another in the argument list

偶尔,我会遇到一个论点想引用另一个论点。例如,

def monitor(time: Double, f: Double => Double, resolution: Double = time / 10) = {...}

注意分辨率是指时间。有没有语言可以做到这一点?在 Scala 中可以吗?

我不知道任何可以进行这种构造的语言,但不难找到一个简单的解决方法。

在 Scala 中,这样的事情是可能的:

scala> def f(i : Int, j : Option[Int] = None) : Int = {
     | val k = j.getOrElse(i * 2)
     | i + k
     | }
f: (i: Int, j: Option[Int])Int

scala> f(1)
res0: Int = 3

scala> f(1, Some(2))
res1: Int = 3

在scala中,你也可以做这样的事情:

scala> def g(i : Int)(j : Int = i * 2) = i + j
g: (i: Int)(j: Int)Int

scala> g(2)(5)
res6: Int = 7

scala> g(2)()
res7: Int = 6

在Scala中有些可能,但你必须柯里化参数:

def monitor(time: Double, f: Double => Double)(resolution: Double = time / 10) 

你不能按照问题的方式去做。