Scala学习手记1 - 快速体验
又重新开始了scala的学习,因为中断了太长时间,所以这次还得从零开始。学习的过程就记录在这个博客上了。
这次学习的教程是《scala程序设计 java虚拟机多核编程实战》,我在多看上买了电子书。
安装好了scala运行环境以后,先在命令行窗口来一次初体验。在命令行窗口输入如下命令:
val number = 7
执行结果如下图:

我们在命令中并没有指明变量number的类型,但是并令执行后scala根据变量的值推断出了变量的类型,所以输出了number:Int = 6这样的信息。
在上面的使用中val是scala声明变量的一种修饰符,表示声明的变量完成了初始化以后就不可以再做修改。这有些类似于java中的final关键字。再演示一下val的用法,我们重新给变量number赋个值,看看执行结果是什么:

报错了,因为不能给val的变量重新赋值。
不知道大家有没有注意到另外一点:每条语句后面先在没了分号了。就是这样,scala就是对java做了全方位的精简和扩展,让使用者用起来非常痛快(这两个字以后可以拆开理解)。用上分号也是可以的:

以上演示的是scala作为脚本执行的方式。做为JVM上的一种语言,我们可以采用类似java的方式来创建scala类并编译执行。
如下代码创建了一个scala的类(姑且称之为类好了),类名为HelloWorld:
object HelloWorld {
def main(args: Array[String]) = println("Hello World!")
}
将代码写入一个名为HelloWorld.scala的文件中,使用scalac进行编译,编译完成后再使用scala命令执行就是了:

就是这样。也可以使用java命令执行字节码文件,不过需要引入相关的jar包。这里就不演示了。
还是回头看看代码中定义方法的语句吧:
def main(args: Array[String]) = println("Hello World!")
只使用了一个def关键字,使用args:Array[String]这样的方式指明了参数类型,方法体更是出奇的简单。
相信我,以后会看到更简洁更有表现力的写法。
OK!今天就先这样!
Scala学习手记1 - 快速体验的更多相关文章
- scala学习手记38 - 方法命名约定和for表达式
方法命名约定 之前在学习<运算符重载>一节时曾经说过一个方法命名约定:方法的第一个字符决定了方法的优先级.现在再说另一个命名约定:如果方法以冒号(:)结尾,则调用目标是运算符后面的实例. ...
- scala学习手记33 - 使用trait进行装饰
在上一节看到了scala的在实例一级的选择性混入就不得不感叹scala在语法上的扩展性.就通过这样一个特性scala简化了很多在java中的编程概念和设计模式. 比如说在java中常用的组合,以及装饰 ...
- scala学习手记23 - 函数值
scala的一个最主要的特性就是支持函数编程.函数是函数编程中的一等公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回值,甚至可以在其它函数中嵌套.这些高阶函数称为函数值. 举一个简单的例子 ...
- scala学习手记17 - 容器和类型推断
关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var ...
- scala学习手记8 - 自适应的默认做法
scala有一些默认做法,会让代码更简洁.更易读写,下面列出了这样几个特性: 1. 支持脚本.scala支持脚本,因此无须将所有的代码都放到类里.如果脚本可以满足需求,就将代码放到一个脚本里,无须再创 ...
- scala学习手记40 - 使用case类
前面两节我们已经多次接触过case关键字了.case关键字不仅可以用在match/case中来执行模式匹配,也可以用来修饰类.不过用case修饰的类也主要是用来做模式匹配.在上一节曾经提到过match ...
- scala学习手记40 - case表达式里的模式变量和常量
再来看一下之前的一段代码: def process(input: Any) { input match { case (a: Int, b: Int) => println("Proc ...
- scala学习手记39 - 模式匹配
在java中有switch/case这样的模式匹配语句,可以匹配的类型包括int,byte,char,short, enum,在java8又支持了字符串. 在scala中也有类似的模式匹配语句,即ma ...
- scala学习手记37 - 容器的使用
这次统一看一下scala中容器类的几个方法. Set filter()方法 filter()方法用来从Set中过滤获取含有指定特征的元素.示例代码如下: val colors1 = Set(" ...
随机推荐
- Python全栈day26-27(面向对象进阶)
参考 http://www.cnblogs.com/linhaifeng/articles/6204014.html 1,什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访 ...
- 复制新项目 ,tomcat部署时名字还是旧项目名
基于一个就项目 copy 成新项目 关于项目名注意点: 在工作空间下 copy一份新项目 1首先在目录将项目名字更改. 2.在新项目下 找到 [.project]文件 将里面的nama更改 3 ...
- IO流入门-第十二章-ObjectInputStream_ObjectOutputStream
DataInputStream和DataOutputStream基本用法和方法示例,序列化和反序列化 import java.io.Serializable; //该接口是一个“可序列化”的 ,没有任 ...
- CNI Proposal 摘要
原文连接:https://github.com/containernetworking/cni/blob/master/SPEC.md General consideration CNI的想法是先让容 ...
- python基于yield实现协程
def f1(): print(11) yield print(22) yield print(33) def f2(): print(55) yield print(66) yield print( ...
- Linux上free命令的输出及其他
一.明确概念 A buffer is something that has yet to be "written" to disk. A cache is something t ...
- servlet 通过 FileItem 实现多文件上传
[本文简介] 一个servlet 多文件上传的简单例子. [依赖包] commons-fileupload-1.3.1.jar commons-io-2.2.jar [依赖包下载] commons-f ...
- SVM学习笔记(二)----手写数字识别
引言 上一篇博客整理了一下SVM分类算法的基本理论问题,它分类的基本思想是利用最大间隔进行分类,处理非线性问题是通过核函数将特征向量映射到高维空间,从而变成线性可分的,但是运算却是在低维空间运行的.考 ...
- python16_day04【编码、函数、装饰器、包】
一.编码总结 """python2 文件存储默认是ascii方式,启动加#coding:utf8就是文件以utf8方式打开.否则就是以ascii.变量则是str. 例子: ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(2): 关于子表达式
Delphi 正则表达式之TPerlRegEx 类的属性与方法(2): 关于子表达式 // MatchedExpression 与 SubExpressions[0] var reg: TPerl ...