变量定义

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学习笔记(一):入门的更多相关文章

  1. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  2. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  5. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  6. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  7. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  8. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  9. scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

  10. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

随机推荐

  1. 潭州课堂25班:Ph201805201 第六课:散列类型,运算符优先级和逻辑运算 (课堂笔记)

    # # 集合:# se1 = { 1,3,4,5,'a'} # 如果直接添加元素,不能直接添加可变元素# se2 = set() # 定义一个空集合# se3 = {'a'} # 定义个单元素的集合# ...

  2. [国家集训队]Crash的数字表格

    Description: 求$ \sum_{i=1}^n \sum_{j=1}^m lcm(i,j) $ Hint: $ n,m<=10^7 $ Solution: 这题有每次询问 \(O(n) ...

  3. 修正 Mui 下拉上拉刷新功能

    下拉增加动态时间计算功能: 上拉增加状态文字提示功能(当然也支持时间计算功能,只是我们暂时用不到):

  4. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!【转】

    作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 近日,一个在 GitHub 上开源即收获了 3700+ Star 的项目,引起了营长的注意.据介绍,该项目以 TensorFlow ...

  5. 百度Apollo无人驾驶入门课程下载

    本文提供 百度Apollo官网的无人驾驶入门课程下载,主要为视频文件. 视频数量:101个:文件格式:MP4:视频总时长:2小时40分钟:文件总大小:约1.13GB: 马上下载 关注公众号罗孚传说(R ...

  6. mod_wsgi的工作模式和配置

    Openstack所有提供API接口的服务都是python web server,而其本身性能很弱,目前已经将它们配置到了apache上.但对于如何设置mod_wsgi的参数,我一直没有好好去阅读其文 ...

  7. PL/SQL学习笔记之游标

    一:游标 Oracle会创建一个上下文区域,用于处理SQL语句,其中包含需要处理的语句.处理结果等等. 游标指向这一上下文的区域. PL/SQL通过控制游标在上下文区域移动,来获取SQL语句的结果信息 ...

  8. eclipse plugin development -menu

    org.eclipse.ui.menus locationURI MenuContribution locationURI = "[Scheme]:[id]?[argument-list]& ...

  9. VTK计算网格模型上的最短路径

    Dijkstra algorithm to compute the graph geodesic.Takes as input a polygonal mesh and performs a sing ...

  10. 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(下)

    四.聚焦于内容 在iOS7里,强调的不是眼花缭乱的装饰效果,而是最重要的内容本身. 下面我们来探讨这个主题: 1.删除不必要的内容 伟大的设计更多是减法和加法的组合. 虽然很酷的想法是很重要,但还有更 ...