Scala

  • Scala对象初始化时访问成员的坑

    先看如下代码:

    以doTest为入口,这个程序的输出是: null 和期望不一样啊! 原因是Scala以整个类中的内容为构造方法,执行顺序是从基类到子类。运行method时,obj还没有初始化,于是就返回了null。 因为obj不可变,所以这里也不能直接初始化。真正的解决方法是使用lazy关键字,它可以让成员在第一次使用时被初始化。 […]

  • Scala学习(十二)——集合类型

    简介 Java和C++里提供了十分方便的集合类供我们使用,Scala也不例外。 使用Java中的集合类 因为Scala可以直接使用Java库中的类,所以直接使用Java中的集合类也是可以的。用法和Java几乎完全相同:

    但是,如果只是这样的话,就没必要写这篇文章了。Scala也提供了自已的集合类型,相比之下,在Scala中用这些类型 […]

  • Scala学习(十一)——lambda表达式

    简介 lambda表达式是现在非常流行的一种编程特性,其体现了函数式编程的思想。lambda表达式,顾名思义,是一种表达式。和其他表达式不同的地方在于,其返回的是一个函数对象而不是一个数。 基本用法 回顾Scala学习四的“方法”一节,方法的类型同样适合于lambda表达式的类型。而lambda表达式的定义方式和其类型的定义方式比较类似,是参数名列表,=>,函数体: [crayon-6606 […]

  • Scala学习(十)——作用域和import

    简介 作用域,是几乎所有高级语言都具有的功能。import关键字(或者类似的关键字),是几乎所有面向对象语言必备的功能。毫无疑问,在Java虚拟机上运行的Scala,也具有这两个功能。然而,Scala的import功能并非完全照搬Java的import,其用法和区别将在本节详解。 import语句 Java的import语句放在java文件的起始位置,用于导入类、常量。Scala也有这一功能(Ja […]

  • Scala学习(九)——隐式转换

    简介 几乎所有的语言都有隐式转换系统,比如C++中数字类型的隐式转换,js中数字和字符串之间互相隐式转换等等。但在这些语言里,隐式转换都是预定义的,无法给自己定义的类或者对象赋予隐式转换的能力。Scala打破了这种限制,提供了一种方法使得隐式转换不再是预定义类型的专利。 双目运算符的重载问题 前面提到过运算符重载,Scala中运算符本质上是方法。一般说来,运算符前操作数是对象本身,后操作数是输入的 […]

  • Scala学习(八)——异常处理

    简介 要编写一个好的程序,异常处理非常必要。Scala提供了和其他语言类似的异常处理方式。 throw语句 Scala可以直接抛出Java中的任意Throwable类型的对象:

    异常抛出检查 Scala取消了Java中的抛出异常声明和检查,所以不存在throws关键字。同样,Scala中所使用Java库的抛出异常声明也不需要理会。 […]

  • Scala学习(杂1)

    简介 有一些内容不是很容易归类,篇幅也不够,但是是需要了解的部分,暂且放在这里。 标识符 除了关键字,运算符,数字,字符串和一些特殊符号,剩下的就是标识符,标识符构成了代码的重要部分。 Scala标识符可以由$,_,字母,数字,以及大部分的字符(包括中文字符)构成。 要点: _单独使用时不是标识符 数字不能作为标识符开头 $不建议使用在标识符中 某些字符会被当做运算符处理,比如→,注意和-> […]

  • Scala学习(七)——Apply和Unapply

    简介 apply和unapply指的是持有这两个名字的方法,对于这两个方法,Scala编译器做了一些特殊的设定,赋予了它们特殊的意义,让它们看起来更好看一点。 从数组讲起 在前面的内容里,我们已经定义过数组了,但是还从来没有介绍过如何使用数组,在这里补齐一下:

    刚接触Scala的人一定很疑惑为什么使用()而不是常用的[]作为数组访问 […]

  • Scala学习(六)——运算符

    简介 在任何语言里,运算符都是很重要的部分,Scala也不例外。然而,从某种意义上讲,Scala根本就没有除了直接赋值运算符=以外的运算符。这是怎么回事儿呢?接下来就开始讲。 本质 在Scala中,除了=以外,运算符其实都是方法。中缀运算符是一个参数的方法,前缀运算符和后缀运算符是无参方法。在其他语言中我们熟悉的表达式到了Scala中可能实质上只是一系列方法调用。比如: [crayon-6606d […]

  • Scala学习(五)——泛型

    简介 在Java或者C++里面,像列表(List)这些数据结构,在编写的时候,都不需要指定其中元素的类型,而是构造的时候指定,这一特性就称为泛型。同样,Scala中也提供了泛型,而且功能比Java的泛型更加强大。 类的泛型 可以给一个类添加泛型,这样,在编写的时候就不需要考虑这一类型的具体情况,而是使用一个标记来注明。泛型的定义列表用[]包含,用,分隔,卸载类名之后,构造函数参数列表之前,泛型的具 […]

文章导航