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)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
随机推荐
- Mysql 登录及用户切换、用户权限查询
启动mysql: 方法一:net start mysql(或者是其他服务名) 方法二:在windows下启动MySQL服务 MySql安装目录:"d:\MySql\" 进入命令行输 ...
- vi 命令 行首、行尾
vim 跳到行首 : 数字 0 vim跳到行位 : $ [Shift + 4]
- 实例化和设置一个优秀的php对象
类是用于生成对象的代码模板,对象可以被说成是类的"实例" class ShopProduct{ public $title = 'default product'; // 属性也称 ...
- Codeforces Round #407 div2 题解【ABCDE】
Anastasia and pebbles 题意:你有两种框,每个框可以最多装k重量的物品,但是你每个框不能装不一样的物品.现在地面上有n个物品,问你最少多少次,可以把这n个物品全部装回去. 题解:其 ...
- Clion调试ROS包
1. 安装 从官网下载最新版本的Clion https://www.jetbrains.com/clion/ 并解压到指定的目录,例如: /home/xkc/software/clion-2017.2 ...
- eclipse和jdk的版本问题,比如printf()出错
1.右键项目选中properties 2.Java Builder Path >>>Libraries>>>选中JRE Syste Library[jre7]然后r ...
- 可以替代putty的ssh客户端
1. Bitvise SSH Client http://www.putty.org/ Bitvise SSH Client is an SSH and SFTP client for Windows ...
- 斗鱼宣布获C轮15亿融资 直播行业进入资本时代
今天,斗鱼直播宣布完成C轮15亿人民币融资,本轮融资由凤凰投资与腾讯领投,深创投.国家中小企业基金.红土成长等跟投.2016年3月,斗鱼曾获得1亿美元(约合6.7亿元人民币)B轮融资,腾讯出资4亿人民 ...
- C#并行Parallel编程模型实战技巧手册
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...
- 如何在Windows 10上访问NFS的share
大致过程是: 1. 开启名为"Services for NFS"的Windows Feature. 2. 如果需要拥有写权限,需要修改注册表. 3. Mount即可. 具体步骤详见 ...