Scala学习笔记(一):入门
变量定义
Scala有两种变量,val和var。val类似于Java中的final变量,一旦初始化了,val就不能再被赋值。var可以多次赋值。但由于函数式编程特性,Scala更推崇val。
var的使用也有其局限性,Scala有类型推断的功能,当var被初始化后,其类型就已经被断定,比如

当m被赋值hello后,其被推断为String类型,此时再对m重新赋值,如果不是String类型则会报错:

函数定义
函数定义用def,如:

其中Unit类似于Java中的void。
以上是无参无返回值的最简单的函数,那么有参有返回值表达如下:

编写Scala脚本
编写hello.scala,内容如下:
println(args(0))
运行:

用while做循环,if做判断
在printargs.scala中输入:
var i = 0
while (i < args.length) {
println(args(i))
i += 1
}
执行结果:

用foreach和for做枚举
编写脚本echoargs.scala:
args.foreach(a => println(a))
for(i <- 0 to 3) {
println(i)
}
(0 to 3).foreach(i => println(i))
(4 until 6).foreach(println)
执行如下:

数组
编写arrays.scala:
val strArr = new Array[String](3)
strArr(0) = "Hello "
strArr(1) = "World"
strArr(2) = "~~~"
strArr.foreach(print)
println
strArr.update(2, "!")
strArr.foreach(print)
println
val apply = strArr.apply(1)
println("apply:" + apply)
val arr1 = Array(5, 2, 0)
arr1.foreach(print)
运行如下:

List
编写list.scala:
// 追加元素
val hello = List("World")
val strings = "Hello" :: hello
strings.foreach(println)
// 空列表Nil
val intList = 1 :: 2 :: Nil
// 追加List
val oneTwoThree = List(1, 2, 3)
val fourFiveSix = List(4, 5, 6)
val mix = oneTwoThree ::: fourFiveSix
mix.foreach(println)
运行如下:

Tuple(元组)
编写tuple.scala:
val tuple = (1, "a")
println(tuple._1)
println(tuple._2)
运行如下:

Set和Map
编写set_map.scala:
// 不可变Set
var jetSet = Set("Hi", "yan")
jetSet += "~~"
print(jetSet.contains("~~"))
println()
import scala.collection.mutable
// 可变Set
val mutableSet = mutable.Set("a", "b")
mutableSet += "c"
println(mutableSet)
val immutableMap = Map(1-> "a", 2-> "b", 3-> "c")
println(immutableMap(3))
val mutableMap = mutable.Map[Int, String]()
mutableMap += 1 -> "aa"
mutableMap += 2 -> "bb"
mutableMap += 3 -> "cc"
println(mutableMap(1))
运行:

文件读取
编写source.scala:
import scala.io.Source
def widthOfLength(s: String) = s.length.toString.length
if (args.length > 0) {
val lines = Source.fromFile(args(0)).getLines().toList
val longestLine = lines.reduceLeft(
(a, b) => if (a.length > b.length) a else b
)
val maxWidth = widthOfLength(longestLine)
for (line <- lines) {
val numSpaces = maxWidth - widthOfLength(line)
val padding = " " * numSpaces
println(padding + line.length + " | " + line)
}
}
else
Console.err.println("Please enter filename")
运行如下:

Scala学习笔记(一):入门的更多相关文章
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- DBFlow框架的学习笔记之入门
什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
随机推荐
- 探究functools模块wraps装饰器的用途
<A Byte of Python>17.8节讲decorator的时候,用到了functools模块中的一个装饰器:wraps.因为之前没有接触过这个装饰器,所以特地研究了一下. 何谓“ ...
- 数学——函数极限知识以及sympy库的limit
函数极限与Sympy库 欢迎访问我的博客 这部分可以参考sympy库中的limit 在$z_0$点处计算$e(z)$函数的极限 \(\lim_{z \to z_0} e(z)\) = limit(e, ...
- Hook Directx + CEGUI VC++
void CtestwmDlg::OnBnClickedButton1() { CStringA lpszFile; m_file.GetWindowText(lpszFile); if (lpszF ...
- (总结)Ubuntu apt-get apt-cache命令 使用
http://rsljdkt.iteye.com/blog/1142463 apt-cache search wubipinyin apt-get命令本身并不具有管理软件包功能,只是提供了一个软件包管 ...
- Unity Shader-后处理:简单均值模糊
一.简介 今天来学习一下后处理中比较常用的一种效果,屏幕模糊效果.模糊效果,在图像处理中经常用到,Photoshop中也有类似的滤镜.我们在游戏中也会经常用到.因为屏幕模糊效果是一些高级后处理效果 ...
- C# CRC16 和汉明重量
最近在看redis之类的pdf,发现redis在做集群的时候,不同的key分到不同的主服务器,其中划分key的算法采用CRC16算法,所以特此整理一下其C#code如下: #region CRC16 ...
- 你的项目真的需要Session吗? redis保存session性能怎么样?
在web开发中,Session这个东西一直都很重要,至少伴随我10年之久, 前一段时间发生一个性能问题,因为Redis session 问题,后来想想 其实我的项目session 是不需要的. 先看看 ...
- JavaScript之Date日期对象扩展
各种时间加减 收藏起来以备后用 //名称:日期加法函数 //参数:part(year.month.day.hour.minute.second.millisecond) //返回:Date对象 Dat ...
- Spark实现K-Means算法
K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类. MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那 ...
- Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate
(1)将Maven项目先clean,接着install下 (2)运行mvn mybatis-generator:generate命令 注意修改generatorConfig.xml的location: ...