加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:21:43 所属栏目:安全 来源:网络整理
导读:有人知道如果这样的事情可能在Scala: case class Thing(property:String)def f(thing:Thing,prop:String = thing.property) = println(prop) 上面的代码不编译;给出错误错误:没有找到:value thing在thing.property 以下显示预期的行为: f(Thing("abc"),"
有人知道如果这样的事情可能在Scala:

case class Thing(property:String)

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

上面的代码不编译;给出错误错误:没有找到:value thing在thing.property

以下显示预期的行为:

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

我意识到,我可以使用一个Option [String]的参数,并在函数定义中进行检查,但是我想知道在2.8.0中是否有新的命名/默认参数支持.

解决方法

是的,可以在Scala 2.8中.这是 “Named and Default Arguments in Scala 2.8”设计文件的引用:

Since the scope of a parameter extends
over all subsequent parameter lists
(and the method body),default
expressions can depend on parameters
of preceding parameter lists (but not
on other parameters in the same
parameter list). Note that when using
a default value which depends on
earlier parameters,the actual
arguments are used,not the default
arguments.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读