Scala
文章平均质量分 92
喜欢路飞的银桑
前端狗
展开
-
Scala之旅(TOUR OF SCALA)——类(CLASSES)
定义一个类 Defining a class构造器 Constructors私有成员和 GetterSetter 语法 Private Members and GetterSetter Syntax类在 Scala 中是创建对象的蓝图。类可以包含方法,常量,变量,类型,对象,特征和类,它们被统一称为成员。类型成员,对象成员和特征成员将在之后讨论。定义一个类 (Definin翻译 2018-02-07 19:16:42 · 285 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——类型上限(UPPER TYPE BOUNDS)
在 Scala 中,类型参数和抽象类型可以使用类型界限限制。一个类型上限 T <: A 声明了类型变量 T 是类型 A 的子类。这里有一个例子演示了一个有类型上限的类型参数的 PetContainer 类:abstract class Animal { def name: String}abstract class Pet extends Animal {}cl...翻译 2018-05-18 10:07:01 · 329 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——类型下限(LOWER TYPE BOUNDS)
当类型上限限制了一个类型是另一个类型的子类时,类型下限则声明了一个类型是另一个类型的父类。这个表达式 B >: A 表示类型参数 B 或抽象类型 B 是类型 A 的父类。在大部分例子中, A 将成为类的类型参数, B 将成为方法的类型参数。下面是一个有用的例子:trait Node[+B] { def prepend(elem: B): Node[B]}case c...翻译 2018-05-18 10:08:58 · 315 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——内部类(INNER CLASSES)
在 Scala 中,让类中有其它类作为成员是可能的。与类 Java 的语言内部类作为封闭类的成员相反,,在 Scala 中内部类是被绑定到外部对象上的。假设编译器在编译时想阻止我混合哪些结点属于哪些类。路径依赖类型提供了一个解决方案。为了演示不同, 我们迅速实现一个图的数据类型:class Graph { class Node { var connectedNo...翻译 2018-05-18 10:12:32 · 245 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——泛型类(Generic Classes)
泛型类是一种带了一个类型作为参数的类。他们对集合类是非常有用的。定义一个泛型类(Defining a generic class)泛型类使用中括号 [] 接收类型参数,虽然类型参数可以是任何名字,但是一个惯例是使用字母 A 作为类型参数标识符。class Stack[A] { private var elements: List[A] = Nil def push(翻译 2018-05-12 22:23:21 · 391 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——变化 (VARIANCES)
class Foo[+A] // 协变类class Bar[-A] // 逆变类class Baz[A] // 不变类协变类(Covariance)泛型类的类型参数 A 可以使用 +A 注解来协变。翻译 2018-05-12 22:28:11 · 240 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——FOR 关键字的理解(FOR COMPREHENSIONS)
Scala 提供了一个轻量级的 for 来表达序列的理解。理解从 for (enumerators) yield e 结构开始,enumerators 指得是一个分号分隔列表的迭代。每次迭代既会产生一个新变量,又是一个过滤器。 e 的理解就是迭代中的每一个序列中的值。 这段不是很理解,所以帖出原文,希望指正 Scala offers a lightweight notation翻译 2018-05-13 10:19:02 · 299 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——目录(CONTENTS)
Scala之旅(TOUR OF SCALA)——基础(BASICS)Scala之旅(TOUR OF SCALA)——统一类型(UNIFIED TYPES)Scala之旅(TOUR OF SCALA)——类(CLASSES)Scala之旅(TOUR OF SCALA)——特征(TRAITS)Scala之旅(TOUR OF SCALA)——通过混合组成类(CLASS COMPOSITION ...翻译 2018-05-13 10:48:30 · 685 阅读 · 0 评论 -
# Scala之旅(TOUR OF SCALA)——抽象类型(ABSTRACT TYPES)
特征和抽象类可以有抽象类型的成员。这意味着实际的类型定义具体的实现。这里有一个例子:trait Buffer { type T val element: T}这里我们定义了一个抽象 type T 。它被用来描述 element 的类型。我们能在抽象类中继承这个特征,添加 T 的类型上限让它更明确。abstract class SeqBuffer extends B...翻译 2018-08-01 11:28:42 · 179 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——复合类型(COMPOUND TYPES)
有时要表达对象的类型是其它几种类型的子类型。在 Scala 中使用复合类型来表达,它是对象类型的交集。trait Cloneable extends java.lang.Cloneable { override def clone(): Cloneable = { super.clone().asInstanceOf[Cloneable] }}trait R...翻译 2018-08-01 12:50:27 · 255 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——解析器对象(EXTRACTOR OBJECTS)
解析器对象一个拥有 unapply 方法的对象。正如 apply 方法像一个构造器一样将参数加工成一个对象,unapply 方法将一个对象解析并返回参数。这经常用于模式匹配和局部函数。import scala.util.Randomobject CustomerID { def apply(name: String) = s"$name--${Random.nextLong}"翻译 2018-05-09 10:07:03 · 276 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——正则表达式匹配(REGULAR EXPRESSION PATTERNS)
正则表达式是用来寻找在数据中符合某个模式的字符串。任何字符串都可以使用 .r 方法转换成正则表达式。import scala.util.matching.Regexval numberPattern: Regex = "[0-9]".rnumberPattern.findFirstMatchIn("awesomepassword") match { case Some(_) =翻译 2018-05-09 10:05:56 · 293 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——单例对象(SINGLETON OBJECTS)
一个对象是一个只有一个实例的类。当它在被引用时将使用懒加载,就像一个懒加载的常量(只有要使用这个常量时,它才会被加载)。作为一个顶级变量,一个对象就是一个单例。作为一个类或局部变量的成员,它的行为几乎与就像一个懒加载的常量相同。定义一个单例对象 (Defining a singleton object)一个对象就是一个值。定义一个对象就像定义一个类一样。但是使用 object 关键翻译 2018-04-20 14:12:39 · 342 阅读 · 0 评论 -
Scala 之旅(TOUR OF SCALA)——统一类型(UNIFIED TYPES)
Scala 类型继承结构 Scala Type Hierarchy类型转换 Type Casting什么都没有与空Nothing and Null在 Scala 中,所有的值都有类型,包括数值和函数。下面这个图表说明了类型继承结构的子集。Scala 类型继承结构 (Scala Type Hierarchy)Any 是所有类型的父类,也被叫成顶层类型。它定义了几个最普翻译 2018-02-06 18:03:39 · 362 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——基础(BASICS)
在浏览器中尝试 Scala 编程你可以使用在浏览器使用 ScalaFiddle 运行 Scala 程序。点击前往 https://scalafiddle.io。在左边的面板中粘贴 println("Hello, World!")。点击左上角的“Run”按钮,右边的面板中会输出结果。这是一个简单的,零基础的运行 Scala 代码的方式。在文档中有很多例子都是集成了 ScalaFiddle 插件翻译 2018-02-05 14:19:27 · 391 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——通过混合组成类(CLASS COMPOSITION WITH MIXINS)
混合就是被用来组合成类的特征。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()}class D...翻译 2018-02-27 22:18:29 · 191 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——特征(TRAITS)
特征被用来在类与类之间共享接口和属性。它与 Java 8 中的接口很相似。类(Classes)和对象(Objects)能继承特征,但是特征不能实例化而且不能有参数。定义一个特征 (Defining a trait)一个最小的特征是简单的关键字 trait 后接一个特征名。trait HairColor特征在泛型和抽象方法上特别有用。trait Iterator[A] {翻译 2018-02-22 15:07:56 · 298 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——高阶函数(HIGHER-ORDER FUNCTIONS)
方法强制包装成函数 (Coercing Methods into functions)以函数作为参数的函数 (Functions that accept functions)以函数作为返回值的函数 (Functions that return functions)高阶函数使用函数作为参数或者返回函数作为结果。这是可能的,因为在 Scala 中函数和类一样,是可以单独存在的。...翻译 2018-03-11 20:48:57 · 305 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——嵌套方法(NESTED METHODS)
在 Scala 中定义嵌套方法是可能的。下面的例子中的对象提供了一个叫 factorial 的方法来计算给定参数的阶乘。 def factorial(x: Int): Int = { def fact(x: Int, accumulator: Int): Int = { if (x 1) accumulator else fact(x - 1, x * ac翻译 2018-03-13 21:53:34 · 224 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——多重参数列表(柯里化)(MULTIPLE PARAMETER LISTS(CURRYING))
方法可以定义多重参数列表。当一个方法被调用时仅传入一部分参数时将会产生一个由剩下参数列表作为参数的方法。我们通常叫它——柯里化。这里有一个例子,在 Scala 的集合库中定义的一个可遍历化特征(Traversable trait)中的一个方法:def foldLeft[B](z: B)(op: (B, A) => B): BfoldLeft 方法使用一个二元操作符(匿名函数) op 去翻译 2018-04-08 13:20:24 · 491 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——条件类(CASE CLASSES)
条件类很像普通的类,就只有一点点我们之前说过的关键性的不同。条件类擅长构造不可变数据。下一步,我们将条件类在 模式匹配 中的大用处。定义条件类(Defining a case class)一个最小条件类需要关键字 case class,一个类名和一个参数列表(可能为空):case class Book(isbn: String)val frankenstein = Book("翻译 2018-04-11 09:18:28 · 379 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——模式匹配(PATTERN MATCHING)
模式匹配是一种检查值是否匹配某种模式的机制。成功的匹配也可以将价值解构成其组成部分(这句翻译有问题)[6]。这是一个比 Java 中的 switch 更强大的版本,也同样被用来代替一系列的 if/else 结构。语法 (Syntax)一个 match 表达式有一个待匹配的值, match 关键字和至少一个 case 表达式组成。import scala.util.Random...翻译 2018-04-11 15:17:07 · 254 阅读 · 0 评论 -
Scala之旅(TOUR OF SCALA)——自类型(SELF-TYPE)
自类型是声明一个特征必须继承另一个特征,甚至没有直接继承它的一种方式。这使得依赖成员在没有导入时就可以使用。自类型就是一种缩小 this 类型或 this 别名的类型。语法看起来像普通函数的语法但是意思完全不同。在特征中使用自类型,定义一个标识符,是另一个类型的特征和一个 => 。(例如: someIdentifier: SomeOtherTrait =>)。trait U...翻译 2018-08-01 20:15:14 · 284 阅读 · 0 评论