- 博客(17)
- 资源 (3)
- 收藏
- 关注
翻译 Scala之旅 - 命名参数(NAMED ARGUMENTS)和包和导入(PACKAGES AND IMPORTS)
命名参数(NAMED ARGUMENTS)当调用方法时,你可以使用它们的参数名称标记参数:def printName(first: String, last: String): Unit = { println(first + " " + last)}printName("John", "Smith") // Prints "John Smith&qu
2018-05-17 02:17:17 513
翻译 Scala之旅-注解(ANNOTATIONS)和默认参数值(DEFAULT PARAMETER VALUES)
注解(ANNOTATIONS)注解将元信息(meta-information)与定义相关联。例如:方法前的注解 @deprecated 会造成编译器在该方法被调用时打印警告信息。object DeprecationDemo extends App { @deprecated def hello = "hola" hello }这个程序可以编译但是编译器会打印一句警告:...
2018-05-17 01:59:06 4948
翻译 Scala之旅-操作符(OPERATORS)和 by-name 参数(BY-NAME PARAMETERS)
操作符(OPERATORS)在 Scala 中,操作符也是方法。任何具有单个参数的方法都可以被作为中缀运算符(infix operator)。例如, + 可以用点表示法调用。10.+(1)但是,作为中缀运算符(infix operator)读起来更容易:10 + 1定义和使用操作符你可以使用任何合法的标识符作为操作符。这包括类似的名称 add 或符号 +。cas...
2018-05-17 01:29:47 513
翻译 Scala之旅-多态方法(POLYMORPHIC METHODS)和类型推断(TYPE INFERENCE)
多态方法(POLYMORPHIC METHODS)Scala 中的方法可以通过类型和值进行参数化。语法和泛型类类似。类型参数用方括号[]括起来,而值参数用圆括号()括起来。看下面例子:def listOfDuplicates[A](x: A, length: Int): List[A] = { if (length < 1) Nil else x ::...
2018-05-17 01:05:20 1026
翻译 Scala之旅-隐式参数(IMPLICIT PARAMETERS)和隐式转换(IMPLICIT CONVERSIONS)
隐式参数(IMPLICIT PARAMETERS)方法可以有一个隐式参数列表,在参数列表的开头用 implicit 关键字标记。如果参数列表中的参数没有像往常那样传递,Scala 将会查看它是否可以获取一个正确类型的隐式值,如果可以,则自动的传递它。Scala 将寻找参数的位置分为两类:在带有隐式参数块的方法被调用时,Scala 首先会查找可以被直接获取(没有前缀)的隐式定义和隐式参...
2018-05-17 00:45:17 1840
翻译 Scala之旅-内部类(INNER CLASSES)和复合类型(COMPOUND TYPES)
Scala 中的类可以把其它类作为自己的成员。与内部类是封闭类(enclosing class)成员的 Java 语言相反,Scala 中的内部类被绑定在外部对象上。假设我们希望编译器在编译时能阻止我们,混合哪些节点属于哪个图。路径依赖类型(Path-dependent types)为此提供了一个解决办法。 为了说明这个差异,我们快速书写出图形数据类型的实现:class Graph { ...
2018-05-16 23:50:18 544
翻译 Scala之旅-上边界(UPPER TYPE BOUNDS)和下边界(LOWER TYPE BOUNDS)
上边界在 Scala 中,类型参数和抽象类型可能受到类型界限的约束。这样的类型边界限制了类型变量的具体值并可能揭示此类类型成员的更多信息。上界 T <: A 声明变量类型 T 是 A 类型的子类型。 这里有个例子演示了 PetContainer 类型参数的上边界。abstract class Animal { def name: String}abstract class ...
2018-05-16 23:10:02 1986 4
翻译 Scala之旅-变化(VARIANCES)
变化(Variance)是复杂类型的子类型关系与组件类型的子类型关系之间的相关性。Scala 支持泛型类的参数类型的变化注解(variance annotations),如果没有使用注解,则允许它们是协变的(covariant),逆变的(contravariant)或不可变的(invariant)。在类型系统中使用变化(variance)允许我们在复杂类型之间做出直观的连接,而缺少变化( va...
2018-05-16 23:09:42 919
翻译 Scala之旅-解析(FOR COMPREHENSIONS)和泛型类(GENERIC CLASSES)
Scala 为表达序列解析提供了轻量级的符号。 解析器具有 for (enumerators) yield e 形式,其中 enumerators 是一个以分号分隔的枚举器列表。一个 枚举器要么是一个引入新变量的生成器,要么是一个过滤器。解析器对枚举器生成的每一个绑定的主体 e 进行评估计算,并返回这些值的序列。 看下面这个例子:case class User(val name: Strin...
2018-05-16 16:07:40 399
翻译 Scala之旅-正则表达式模式和提取器对象(EXTRACTOR OBJECTS)
正则表达式模式 正则表达式是用于查找数据中模式的字符串。任何字符串都可以使用 .r 方法转换为正则表达式。import scala.util.matching.Regexval numberPattern: Regex = "[0-9]".rnumberPattern.findFirstMatchIn("awesomepassword") match
2018-05-16 16:03:37 4605
翻译 Scala之旅-单例对象(SINGLETON OBJECTS)
对象是一个只有一个实例的类。当它被引用的时候,它被懒惰地创建,就像一个懒惰的 val 一样。 作为顶级的值,对象是一个单例。 作为封闭类成员或本地值,它的行为表现的完全像是一个懒惰的 val。定义单例对象一个对象是一个值。对象的定义看起来像是一个类,但是使用的是关键字 object:object Box下面是一个带方法对象的例子 新建 Logger.scala...
2018-05-16 13:34:54 1407
翻译 Scala之旅- Case 类(CASE CLASSES)和模式匹配(PATTERN MATCHING)
Case 类(CASE CLASSES) Case 类就像普通类一样,不过和普通类存在几个关键的区别,接下来我们将介绍一下。Case 类有助于对不可变的数据建模。后面也会介绍 Case 类在模式匹配中的应用。定义 case 类一个最简单的 case 类需要关键字 case class,名称标识符和参数列表(参数列可以为空):case class Book(isbn: St...
2018-05-16 13:34:38 5018
翻译 Scala之旅-嵌套方法(NESTED METHODS)和多参数列表(Currying)
嵌套方法(NESTED METHODS)在 Scala 中可以定义嵌套方法。以下提供了 factorial 方法用于计算给定数字的阶乘。 def factorial(x: Int): Int = { def fact(x: Int, accumulator: Int): Int = { if (x <= 1) accumulator else fact...
2018-05-16 01:25:45 811
翻译 Scala之旅-高阶函数(HIGHER-ORDER FUNCTIONS)
高阶函数是把其它函数当作参数或者返回一个函数作为结果。这是可能的,因为在 Scala 中函数是最优先的值。在这点上,术语可能会令人困惑,我们使用术语”高阶函数“来表示那些把函数作为参数或函数作为返回结果的方法和函数。 其中最常见的例子之一,就是 Scala 中可用于集合的高阶函数 map。val salaries = Seq(20000, 70000, 40000)val double...
2018-05-16 00:50:08 730
翻译 Scala之旅-混合组成的类(CLASS COMPOSITION WITH MIXINS)
Mixins 就是用于组成类的 traits。abstract class A { val message: String}class B extends A { val message = "I'm an instance of class B"}trait C extends A { def loudMessage = message.toUpperCase()}c...
2018-05-16 00:45:50 232
翻译 Scala之旅-类(CLASSES)
Scala 中的类是创建对象的蓝图。类中可以包含方法,值,变量,类型,对象,traits(特征)和成员类。类型,对象和traits(特征)将在后面介绍。定义类最简单的类定义就是使用关键字 class 和标识符。类名应该使用大写。class Userval user = new User 使用关键字 new 去创建一个类的实例对象。因为User没有自定义的构造器,所以Scal...
2018-05-02 23:13:54 331
翻译 Scala之旅-统一类型(UNIFIED TYPES)
在 Scala 中,所以的值都有类型,包括数值和函数。下图说明了类型层次结构的子集。 Scala类型层次结构Any 是所有类型的父类型,也叫顶层类型。它里面定义了几个确定的方法,例如equals,hashcode和toString。Any 有两个直接的子类 AnyVal 和 AnyRef。 AnyVal 代表值类型,有9种预定义的值类型并且它们都不能为空:Double,Float,Lo...
2018-05-02 23:12:57 446
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人