gpt4 book ai didi

scala - 可选参数值是否可能依赖于Scala中的另一个参数

转载 作者:行者123 更新时间:2023-12-03 14:03:39 26 4
gpt4 key购买 nike

有谁知道Scala中是否可以进行以下操作:

case class Thing(property:String)

def f(thing:Thing, prop:String = thing.property) = println(prop)


上面的代码无法编译;在 error: not found: value thing处给出错误 thing.property

下面显示了预期的行为:

f(Thing("abc"), "123") // prints "123"
f(Thing("abc")) // prints "abc"


我意识到我可以将 prop参数设置为 Option[String]并在函数定义中进行检查,但是我想知道在2.8.0中是否有一种方法可以支持新的named / default参数。

最佳答案

是的,在Scala 2.8中是可能的。这是来自"Named and Default Arguments in Scala 2.8"设计文档的引文:


由于参数的范围扩展
在所有后续参数列表中
(以及方法主体),默认
表达式可以取决于参数
前面的参数列表(但不是
在相同的其他参数上
参数列表)。请注意,使用时
默认值取决于
较早的参数,实际
使用参数,而不是默认值
论点。


def f(a: Int = 0)(b: Int = a + 1) = b // OK


再举一个例子:

def f[T](a: Int = 1)(b: T = a + 1)(c: T = b)
// generates:
// def f$default$1[T]: Int = 1
// def f$default$2[T](a: Int): Int = a + 1
// def f$default$3[T](a: Int)(b: T): T = b


据此,您的代码可能如下所示:

scala> case class Thing(property:String)
defined class Thing

scala> def f(thing:Thing)(prop:String = thing.property) = println(prop)
f: (thing: Thing)(prop: String)Unit

scala> f(Thing("abc"))("123")
123

scala> f(Thing("abc"))()
abc

关于scala - 可选参数值是否可能依赖于Scala中的另一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com