Scala2.8新特性:使代码更简洁的命名参数和默认参数

原文:
翻译:Xuefeng Wu

Scala 2.8会引入很多有趣的新特性,比如重新设计的集合类库,命名和默认参数,支持continuations,a pimped REPL,等。等下我会展示命名的和默认参数会使我们的Scala代码更加简明。

让我们举一个用Scala 2.7的例子:一个有ID,订单项和运输模式的订单。

case class Order27(id: Long,
items: List[Item],
mode: ShippingMode)

case class Item()

sealed trait ShippingMode
case object StandardShipping extends ShippingMode
case object ExpressShipping extends ShippingMode
case object OvernightShipping extends ShippingMode


订单的ID是“强制行”的要有,而订单项和运输模式可以默认。因此我们不得不提供辅助构造方法。

case class Order27(id: Long,
items: List[Item],
mode: ShippingMode) {

def this(id: Long, items: List[Item]) =
this(id, items, StandardShipping)

def this(id: Long, mode: ShippingMode) =
this(id, Nil, StandardShipping)

def this(id: Long) =
this(id, Nil, StandardShipping)
}


现在可以只提供ID创建订单了。

val order = Order27(1)


这会创建一个空订单项(当然空订单项的订单没有实际意义)和标准运输模式的订单。

在一方面这样很好,但另一方这使代码变大。而且使读者花费更多时间去找哪个是强制的哪个是默认的。

Scala 2.8让我们只要简单将默认值放在类型后面来定义默认的类参数。

case class Order28(id: Long,
items: List[Item] = Nil,
mode: ShippingMode = StandardShipping)


现在我们可以不管已经有默认值的参数,

val order = Order28(1)

会创建一个没用订单项和标准运输的订单。但这不需要辅助构造方法。WoW!

但我们怎么传递运输模式而不管订单项呢?看主构造方法中参数的顺序,这需要我们先传递订单项然后再运输模式。

val order = Order28(1, HERE GOES THE ITEM LIST, OvernightShipping)

现在轮到命名参数进入游戏。我们可以简单得将参数值带上名字,

val order = Order28(1, mode = OvernightShipping)

这样Scala就知道怎么做了。WoW!


相关中文阅读: Eastsun Scala2.8尝鲜:命名参数与默认参数 [url]http://eastsun.iteye.com/blog/402092[/url]
[b]
译者:
这和Ruby的一个功能很类似。
命名参数不只是为了使Scala知道你想传入什么值,而更多是为了参数传入的时候避免错误发生。
[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值