浏览 1634 次
锁定老帖子 主题:Scala2.8尝鲜:命名参数与默认参数
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-04
最后修改:2009-06-04
A Taste of 2.8: Named and Default Arguments
原文地址:翻 译:Eastsun Scala2.8引入了新的特性——命名参数——这意味着我们可以通过使用参数名来指定参数。命名参数可以避免在参数类型相同的情况下混淆各个参数的含义,增强了代码的可读性。 def resize(width: Int, height: Int) = { ... } resize(width = 120, height = 42) 并且,Scala2.8支持在方法中使用默认参数。在当前的版本的Scala中(Eastsun注:指2.8之前的版本),只能通过方法重载来实现参数默认值。这在一定程度上导致代码冗余,而默认参数可以避免这一点。 def f(elems: List[Int], x: Int = 0, cond: Boolean = true) f(List(1)) f(Nil, cond = false) 上面的示例同时示范了命名参数允许选择性使用默认参数:在f方法的第二个调用中,f使用了参数x的默认值,而没有使用cond的默认值。 编译器生成copy方法 命名参数和默认参数一个非常有用的运用是编译器自动为case类生成copy方法。这个方法采取一种轻量级的语法来创建一个原始实例的修改拷贝。copy方法具有和被拷贝的case类的基本构造方法同样类型和参数,并且每个参数都使用基本构造方法中相应值作为默认值。 case class A[T](a: T, b: Int) { // def copy[T'](a: T' = this.a, b: Int = this.b): A[T'] = new A[T'](a, b) } val a1: A[Int] = A(1, 2) val a2: A[String] = a1.copy(a = "someString") Scala2.8还未正式发布,但是其nightly build中已经实现了上述功能。想提前体验下么,点击此处下载。需要了解更多关于命名参数与默认参数的内容,请阅读相应的SID。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |