参数列表中的一个参数引用另一个参数
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)
你不能按照问题的方式去做。
偶尔,我会遇到一个论点想引用另一个论点。例如,
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)
你不能按照问题的方式去做。