Kri*_*ala 17 scala default-value named-parameters scala-2.8
有没有人知道Scala中是否有类似的东西:
case class Thing(property:String)
def f(thing:Thing, prop:String = thing.property) = println(prop)
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译; 给错误error: not found: value thing
的thing.property
以下显示了预期的行为:
f(Thing("abc"), "123") // prints "123"
f(Thing("abc")) // prints "abc"
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使prop
参数成为一个Option[String]
并在函数定义中进行检查,但我想知道是否有一种方法可以使用2.8.0中的新命名/默认参数支持.
Vas*_*iuk 20
是的,它可以在Scala 2.8中使用.以下是"Scala 2.8中的命名和默认参数"设计文档中的引用:
由于参数的范围扩展到所有后续参数列表(和方法体),因此默认表达式可以取决于前面参数列表的参数(但不取决于同一参数列表中的其他参数).请注意,使用依赖于先前参数的默认值时,将使用实际参数,而不是默认参数.
def f(a: Int = 0)(b: Int = a + 1) = b // OK
Run Code Online (Sandbox Code Playgroud)
另一个例子:
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
Run Code Online (Sandbox Code Playgroud)
根据这个,您的代码可能如下所示:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2121 次 |
最近记录: |