Scala2.8尝鲜:命名参数与默认参数

  原文地址:[url=http://www.scala-lang.org/node/2075]A Taste of 2.8: Named and Default Arguments[/url]
  翻  译:[url=http://eastsun.iteye.com]Eastsun[/url]

  Scala2.8引入了新的特性——命名参数——这意味着我们可以通过使用参数名来指定参数。命名参数可以避免在参数类型相同的情况下混淆各个参数的含义,增强了代码的可读性。
def resize(width: Int, height: Int) = { ... }
resize(width = 120, height = 42)

  并且,Scala2.8支持在方法中使用默认参数。在当前的版本的Scala中([color=brown]Eastsun注:[/color]指2.8之前的版本),只能通过方法重载来实现参数默认值。这在一定程度上导致代码冗余,而默认参数可以避免这一点。
def f(elems: List[Int], x: Int = 0, cond: Boolean = true)
f(List(1))
f(Nil, cond = false)

  上面的示例同时示范了命名参数允许选择性使用默认参数:在f方法的第二个调用中,f使用了参数x的默认值,而没有使用cond的默认值。

[b][size=large]编译器生成copy方法[/size][/b]
  命名参数和默认参数一个非常有用的运用是[color=orange]编译器自动为case类生成copy方法[/color]。这个方法采取一种轻量级的语法来创建一个原始实例的修改拷贝。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中已经实现了上述功能。想提前体验下么,点击[url=http://www.scala-lang.org/archives/downloads/distrib/files/nightly/scala-2.8.0.r17978-b20090602182830.tgz#]此处[/url]下载。需要了解更多关于命名参数与默认参数的内容,请阅读[url=http://www.scala-lang.org/sid/1#]相应的SID[/url]。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值