原文:
翻译: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知道你想传入什么值,而更多是为了参数传入的时候避免错误发生。
分享到:
相关推荐
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
scala 2.8 api 文档 chm格式
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
函数入门之默认参数和带名参数 共5页第7讲-Scala编程详解:函数入门之变长参数 共4页第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7...
Scala的设计理念是将面向对象和函数式编程的特性完美融合在一起,使它既能够像面向对象语言那样简洁、直观,又能够像函数式语言那样表达丰富的算法逻辑。Scala的这些特性,特别是其对并发编程的原生支持,使其成为了...
Scala的设计理念旨在提供一个更加简洁和富有表达力的编程模型,同时支持类型安全和并发性。因此,本书作为一本指南,也很可能会深入讨论这些设计理念,并展示如何在实际编程中应用这些概念。 Martin Odersky以其在...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得开发者能够在同一平台上享受到两者的优点。这个压缩包文件"prog-scala-2nd-ed-code-examples-master"包含了Scala程序设计的实例源代码,...
Scala 高级特性 Scala 是一个多-paradigm programming language,它结合了面向对象和函数式编程的特性。在这个主题中,我们将深入探讨 Scala 的高级...Scala 的高级特性可以帮助我们编写更加简洁、灵活和强大的代码。
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"scala学习源代码"的压缩包文件很可能包含了用于教学或自我学习Scala编程的基础示例。让我们深入了解一下Scala语言的关键概念和特性。 ...
综上所述,"scala: scala代码"可能涵盖了以上提到的Scala编程语言的核心概念和特性。通过深入学习和实践这些内容,开发者能够掌握Scala编程,从而在现代软件开发中发挥其优势,特别是在分布式计算、大数据分析和高...
- 方法定义在Scala中更为简洁,支持默认参数、可变参数、命名参数等多种形式。 ```scala def f(x: Int): Int = x * x def a(x: Int, y: Int): Int = x + y def d(): Unit = println("None") ``` #### 资源...