1 基础

1.1 Scala 解释器

REPL — 交互式解释器环境

R(read)、E(evaluate)、P(print)、L(loop)

输入值,交互式解释器会读取输入内容并对它求值,再返回结果,并重复此过程。

1.2 声明 val(值) 和 var(变量)

val: 定义值(常量), 即不可改变引用的指向(不可对其进行赋值操作), 指向的对象能否可变取决于变量自身类型

var: 定义变量, 可以改变引用的指向

  1. 声明值或者变量的同时, 必须初始化;
  2. 可以不指定类型, Scala可以利用初始化值进行类型推断
  3. Scala中, 仅当同一行代码存在多条语句才需要用分号隔开
  4. 可以同时将多个值或者变量放在一起声明 val x, y = 10

1.3 数值类型

与 Java 一样 Scala也有8中数值类型:

Byte, Char, Short, Int, Long, Float , Double Boolean

这些数值类型都是类, 并且 Scala 通过隐式转换为这些类型提供了很多常用方法. 比如说 Scala 提供了 RichInt, RichChar, RichDouble 等, 分别为 Int, Char, Double 提供其所不具备的方法

比如说表达式 1.to(10), Int 值1首先被隐式转换为 RichInt 然后应用 RichInt 类的方法.

其他数值类型还有:

  • BigInt 背后为 java.math.BigInteger
  • Decimal 背后为 java.math.BIgDecimal

在 Scala 中, 我们使用方法而不是强制类型转换来做数值类型之间的转换 比如说 1.4.toInt得到 1, 99.toChar 得到 c

1.4 操作符

在 Scala 中, 操作符有一点特别, 操作符实际上都是方法; 说的更加激进点, 就是 Scala 中没有操作符, 一切都是方法调用, 不过为了表述方便, 我们还是称其为操作符, 不过心里要明白它们都是方法.

比说表达式 a + b 就是方法调用 a.+(b) 的简写

Scala的标识符命名极其灵活, 不会对方法名中出现非字母, 数字,下划线的做法有偏见, 你几乎可以使用任何符号为方法命名

下面来看看 Scala 一个很有用的技巧, 这会让我们的编程风格更加 Scala 化

a.方法(b) 可以简写为 a 方法 b

这里方法是一个带有两个参数的方法(一个隐式的和一个显示的)

+ - * / %
& | ^ >> <<

Scala 没有提供 ++-- 操作符, 使用 +=1 和 -= 1 就可以. 为何没有提供呢? 因为 Scala Int类是不可变的, 这样我们没法通过一个简单的方法实现 ++ . Scala的设计者认为不值得为了少按一个按键而额外增加一个特例

1.5 函数和方法

在介绍 Scala 的函数和方法之前先来简单看一下方法和函数有什么区别吧, 简单的说就是 方法和对象相关;函数和对象无关

除了方法外, Scala 还提供了函数( Java 只有方法), 相比 Java, 在 Scala 中使用数学函数更加简单, 你不需要从某个类中调用它的静态方法.

Scala 的数学函数都在 Scala.math 包中定义. 通过下面语句引入

import scala.math._  或者 import math._
sqrt(2)
pow(2, 3) // 8
min(3, Pi) // 3

Scala 中没有静态方法, 不过它有个类似的特性, 叫做单例对象, 通常一个类对应一个伴生对象, 伴生对象中定义的方法和 Java 中的静态方法一样

不带参数的 Scala 方法通常可以不使用圆括号

记住上面说的是方法而不是对象

快学 Scala 入门 3 部曲的更多相关文章

  1. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

  2. 《快学Scala》

    Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...

  3. 快学Scala 第十九课 (trait的abstract override使用)

    trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...

  4. 快学Scala 第十七课 (trait 入门)

    trait 入门: trait类似于java的接口,不过比java接口功能更强大,可以有实体成员,抽象成员,实体方法,抽象方法. 如果需要混入的特质不止一个用with关键字. 带有特质的对象:(特质可 ...

  5. 快学Scala 2

    控制结构和函数 1.在Scala中,几乎所有构造出来的语法结构都有值.这个特性是为了使得程序更加精简,也更易读. (1)if表达式有值 (2)块也有值——是它最后一个表达式的值 (3)Scala的fo ...

  6. [Scala] 快学Scala A3L3

    Actor 通过尽可能避免锁和共享状态,actor使得我们能够容易地设计出正确.没有死锁或争用状况的程序. Scala类库提供了一个actor模型的简单实现.AKKA是更高级的actor类库. 19. ...

  7. [Scala] 快学Scala A2L2

    集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快 ...

  8. [Scala] 快学Scala A1L1

    基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...

  9. 快学Scala第一部分

    转载: 1.变量声明 val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:Strin ...

随机推荐

  1. NN-Neural Network

    开始学习神经网络(Neural Network) 已有线性与逻辑回归,为什么需要用到NN 实际的应用中,需要根据很多特征进行训练分类器,当今有两个特征下,可以通过下图表述: 然而还有太多的特征需要考虑 ...

  2. 设计模式(2)工厂方法模式(Factory Method)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生 ...

  3. python 遍历列表 list

    names=['a','b',['aha',[['lucy','lily']]] 遍历这个列表 def print_list(this_list); for name in this_list: if ...

  4. 关于MATLAB处理大数据坐标文件201763

    目前已经找出26条特征 ,但是提交数据越来越少,给我的感觉是随机森林画的范围越来越小,输出的机器数据也越来越少,我自认为特征没太大问题 我已经将不懂之处列了出来,将于明天咨询大师级人物

  5. 不带插件 ,自己写js,实现批量上传文件及进度显示

    今天接受项目中要完成文件批量上传文件而且还要显示上传进度,一开始觉得这个应该不是很麻烦,当我在做的时候遇到了很多问题,很头疼啊. 不过看了别人写的代码,自己也测试过,发现网上好多都存在一些问题,并不是 ...

  6. Python: 作图

    在python中实现数据的可视化,也即作图,一般是依赖matplotlib宏包实现的.但常见的代码中都是加载pylab,是不是这里写错了呀?其实pylib只是matplotlib的一个模块,只是被做成 ...

  7. svn怎么切换用户

    在使用svn客户端经常会保存用户及密码,方便下次直接登录,有时需要使用别的账号登录,这时该怎么切换呢? 工具/原料 苹果6 小米4 方法/步骤   在使用svn更新或提交数据时需要输入用户名和密码,在 ...

  8. 6.javaweb之respose对象

    1.respose的生成的outer对象要优先于内置的out对象输出 response.setContentType("text/html;charaset=utf-8");//设 ...

  9. Django学习(八)---修改文章和添加文章

    博客页面的修改文章和添加新文章 从主页点击不同文章的超链接进入文章页面,就是传递了一个id作为参数,然后后台代码根据这个参数从数据库中取出来对应的文章,并把它传递到前端页面 修改文章和添加新文章,是要 ...

  10. Laravel安装及环境的配置(XAMPP集成开发环境下)

    Laravel 使用 Composer 来管理代码依赖.所以,在使用 Laravel 之前,请先确认你的电脑上安装了 Composer. 操作系统为win7: 集成开发环境XAMPP: 第一步:安装C ...