原文:
翻译: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尝鲜:命名参数与默认参数
http://eastsun.iteye.com/blog/402092
译者:
这和Ruby的一个功能很类似。
命名参数不只是为了使Scala知道你想传入什么值,而更多是为了参数传入的时候避免错误发生。
分享到:
相关推荐
scala 2.8 api 文档 chm格式
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门之变长参数 共4页 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页 第9讲-Scala编程详解:数组操作之Array、...
本书介绍Scala基本语法、构造。以及如何将您已经知道的复制java语法转换为Scala,了解Scala除了javabecome之外还提供了哪些功能编程概念和惯用技巧和建议,这些技巧和建议在将现有java项目转换为Scala时非常有用
Scala是一门类Java的编程语言,它结合了面向对象编程和函数式编程。Scala是纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混入(mixin)的方式组合在一起。
Learn Scala is split into four parts: a tour of Scala, a comparison between Java and Scala, Scala-specific features and functional programming idioms, and finally a discussion about adopting Scala in...
Scala 2.8 Collection API图表 这是 .dot文件的一个小集合,其中包含与Scala 2.8 Collection API最相关类型的图表说明。 您可以在上看到最终结果。 这些图表也可以在上。 任何反馈当然都是非常欢迎的。 如何建造 在...
赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
与 Java 的一些差异点,方便读者编写出更简洁的代码;第三部分介绍在 Scala 中如何进行并 发编程,并务实地介绍 Akka 套件;第四部分通过实战练习对前面的知识进行综合应用,并 系统地介绍如何与 Java 进行互操作。...
本书是Scala编程语言的权威教程,由该语言的设计师Martin Odersky共同编写。
scala:scala代码
赠送jar包:scala-xml_2.12-1.0.6.jar; 赠送原API文档:scala-xml_2.12-1.0.6-javadoc.jar; 赠送源代码:scala-xml_2.12-1.0.6-sources...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Scala程序设计 例子 源代码 Scala程序设计 例子 源代码 Scala程序设计 例子 源代码
初学scala的人都会被Seq的各种操作符所困惑。下面简单列举一下各个Seq操作符的区别。 4种操作符的区别和联系 (1) :: 该方法被称为construct,意为构造,向队列的头部追加数据,创造新的列表。用法为: x::list,其中x...