`
alanwu
  • 浏览: 199603 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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尝鲜:命名参数与默认参数 http://eastsun.iteye.com/blog/402092

译者:
这和Ruby的一个功能很类似。
命名参数不只是为了使Scala知道你想传入什么值,而更多是为了参数传入的时候避免错误发生。

0
1
分享到:
评论
2 楼 蔡华江 2010-08-20  

赞一个
1 楼 RednaxelaFX 2009-10-18  
不过Ruby并不支持命名参数,大家都习惯用Hash来解决问题了

相关推荐

    scala2.8 api

    scala 2.8 api 文档 chm格式

    Scala语言规范版本:2.7

    Scala的设计理念是将面向对象和函数式编程的特性完美融合在一起,使它既能够像面向对象语言那样简洁、直观,又能够像函数式语言那样表达丰富的算法逻辑。Scala的这些特性,特别是其对并发编程的原生支持,使其成为了...

    在Scala中进行编程:全面的分步指南Programming in Scala: A comprehensive step-by-step guide

    Scala的设计理念旨在提供一个更加简洁和富有表达力的编程模型,同时支持类型安全和并发性。因此,本书作为一本指南,也很可能会深入讨论这些设计理念,并展示如何在实际编程中应用这些概念。 Martin Odersky以其在...

    Scala程序设计 例子 源代码

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得开发者能够在同一平台上享受到两者的优点。这个压缩包文件"prog-scala-2nd-ed-code-examples-master"包含了Scala程序设计的实例源代码,...

    scala高级特性

    Scala 高级特性 Scala 是一个多-paradigm programming language,它结合了面向对象和函数式编程的特性。在这个主题中,我们将深入探讨 Scala 的高级...Scala 的高级特性可以帮助我们编写更加简洁、灵活和强大的代码。

    scala学习源代码

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"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") ``` #### 资源...

    Scala编程详解 第19讲-Scala编程详解:类型参数 共13页.pptx

    类型参数是Scala编程中一个核心特性,它类似于Java中的泛型,主要用于增强代码的灵活性和类型安全性。通过定义类型参数,我们可以编写通用的类、对象和函数,使得它们能处理多种数据类型。这有助于减少代码重复,...

    Scala基础语法课件汇总整本书电子教案全套课件完整版ppt最新教学教程.pptx

    * 标示符、命名规范、注解和换行符等 * Scala 的常量与变量 * Scala 的编译原理与运行 * Scala 的解释器 (REPL) 和命令行编程技巧 Scala 的应用场景 Scala 的应用场景包括: * 客户端应用程序 * WEB 应用,如 ...

    《Scala实用指南》代码清单

    本书的代码清单提供了丰富的示例,涵盖了各种Scala特性和最佳实践,同时也包含了SBT(Simple Build Tool)的版本,使读者能够更好地理解和构建Scala项目。 Scala语言的核心特性包括: 1. 面向对象与面向函数的结合...

    scala-collections-charts:Scala 2.8 Collections API主要类型为点图(GraphViz)

    Scala 2.8 Collection API图表 这是 .dot文件的一个小集合,其中包含与Scala 2.8 Collection API最相关类型的图表说明。 您可以在上看到最终结果。 这些图表也可以在上。 任何反馈当然都是非常欢迎的。 如何建造 在...

    scala-xml_2.11-1.0.4-API文档-中英对照版.zip

    赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    scala sdk scala-2.12.3

    3. **Scala REPL**:Read-Eval-Print Loop,交互式解释器,允许开发者即时测试代码片段,快速探索语言特性和功能。 4. **文档生成工具**:可以自动生成API文档,方便团队协作和维护。 5. **构建工具接口**:如 sbt...

    Scala可变参数列表,命名参数和参数缺省详解

    总之,Scala的可变参数列表、命名参数和参数缺省值都是为了提高函数的灵活性和易用性。可变参数列表允许函数处理不确定数量的输入,命名参数增强了代码的可读性,而参数缺省值减少了编写完整参数列表的必要。这些...

    Programming in Scala 3rd edition英文版+代码

    此外,Scala支持类型别名、类型参数化(泛型)以及类型系统中的许多高级特性,如类型成员、类型投影和隐式转换。 **模式匹配** 模式匹配是Scala的一个关键特性,它允许开发者以一种声明式的方式处理数据。通过解构...

    scala-intellij-bin-2020.2.3.zip

    - **类型系统**:Scala具有强类型,支持类型推断,使得代码更简洁。 - **模式匹配**:允许开发者以一种声明式的方式处理数据结构。 - **高阶函数**:函数可以作为参数传递,也可以作为返回值。 - **类与对象**:...

    scala2.12.1Windows镜像包

    - **JVM兼容性**:Scala 2.12.x主要针对Java 8及更高版本进行优化,充分利用了JVM的新特性,如Lambda表达式和Stream API。 - **互操作性**:Scala可以直接调用Java库,反之亦然,这得益于良好的Java互操作性。 - ...

    Scala开发规范_最新版本

    **Scala开发规范** Scala是一种多范式编程...在实际开发中,还应持续学习和适应Scala的最新特性和最佳实践,确保代码风格的一致性和团队协作的效率。通过不断实践和总结,开发者可以更好地驾驭这门强大而灵活的语言。

Global site tag (gtag.js) - Google Analytics