scala
bug搬运攻城狮
当你的才华还撑不起你的野心时,你就应该静下心来学习
展开
-
scala笔记-基础语法(1)
声明变量·声明val变量:可以声明val变量来存放表达式的计算结果。 eg:val result = 1 + 1,后续这些常量是可以继续使用的,eg: 2 * result ·但是常量声明后,是无法改变它的值的,eg:result = 1,会返回error: reassignment to val的错误信息。·声明var变量:如果要声明值可以改变的引用,可以使用var变量。 eg:val my...原创 2018-11-02 16:43:16 · 296 阅读 · 2 评论 -
scala笔记-隐式转换与隐式参数(16)
Scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是Java等编程语言所没有的功能。它可以允许你手动指定,将某种类型的对象转换成其他类型的对象。通过这些功能,可以实现非常强大,而且特殊的功能。 Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicit conversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。Scala...原创 2018-11-05 09:03:54 · 186 阅读 · 0 评论 -
scala笔记-类型参数(15)
类型参数是什么?类型参数其实就类似于Java中的泛型。先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add(“2”),然后我们a.get(1) == 2,对不对?肯定不对了,a.get(1)获取的其实是个String——“2”,String——"2"怎么可能与一个Integer类型的2相等呢? 所以Java中提出了泛型...原创 2018-11-05 09:03:38 · 208 阅读 · 0 评论 -
scala笔记-模式匹配(14)
模式匹配// Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,类替代switch case,match case也被称为模式匹配// Scala的match case与Java的switch case最大的不同点在于,Java的switch case仅能匹配变量的值,比1、2、3等;而Scala的match c...原创 2018-11-05 09:03:20 · 275 阅读 · 0 评论 -
scala笔记-函数式编程(13)
将函数赋值给变量// Scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量 // Scala的语法规定,将函数赋值给变量时,必须在函数后面加上空格和下划线 def sayHello(name: String) { println("Hello, " + name) } val sayHelloFunc = sayHello _ sayHelloFu...原创 2018-11-05 09:03:04 · 203 阅读 · 0 评论 -
scala笔记-面向对象编程之Trait(12)
将trait作为接口使用// Scala中的Triat是一种特殊的概念// 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似// 在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可// 类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有impleme...原创 2018-11-05 09:02:49 · 188 阅读 · 0 评论 -
scala笔记-面向对象编程之继承(11)
extends// Scala中,让子类继承父类,与Java一样,也是使用extends关键字// 继承就代表,子类可以从父类继承父类的field和method;然后子类可以在自己内部放入父类所没有,子类特有的field和method;使用继承可以有效复用代码// 子类可以覆盖父类的field和method;但是如果父类用final修饰,field和method用final修饰,则该类是无法...原创 2018-11-05 09:02:31 · 186 阅读 · 0 评论 -
scala笔记-面向对象编程(10)
定义一个简单的类// 定义类,包含field以及方法class HelloWorld { private var name = "leo" def sayHello() { print("Hello, " + name) } def getName = name}// 创建类的对象,并调用其方法val helloWorld =原创 2018-11-02 16:53:47 · 186 阅读 · 0 评论 -
scala笔记-Map与Tuple(9)
创建Map// 创建一个不可变的Mapval ages = Map("Leo" -> 30, "Jen" -> 25, "Jack" -&amp原创 2018-11-02 16:53:13 · 289 阅读 · 0 评论 -
scala笔记-集合操作(8)
Scala的集合体系结构// Scala中的集合体系主要包括:Iterable、Seq、Set、Map。其中Iterable是所有集合trait的根trai。这个结构与Java的集合体系非常相似。// Scala中的集合是分成可变和不可变两类集合的,其中可变集合就是说,集合的元素可以动态修改,而不可变集合的元素在初始化之后,就无法修改了。分别对应scala.collection.mutabl...原创 2018-11-02 16:52:28 · 302 阅读 · 0 评论 -
scala笔记-Array、ArrayBuffer以及遍历数组(7)
Array在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java数组。例如字符串数组在底层就是Java的String[],整数数组在底层就是Java的Int[]。// 数组初始化后,长度就固定下来了,而且元素全部根据其类型初始化val a = new Arra...原创 2018-11-02 16:51:44 · 1129 阅读 · 0 评论 -
scala笔记-过程、lazy值和异常(6)
过程在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数就被称之为过程。过程通常用于不需要返回值的函数。 过程还有一种写法,就是将函数的返回值类型定义为Unit。 def sayHello(name: String) = "Hello, " + name def sayHello(name: String) { prin...原创 2018-11-02 16:51:02 · 170 阅读 · 0 评论 -
scala笔记-变长参数(5)
变长参数在Scala中,有时我们需要将函数定义为参数个数可变的形式,则此时可以使用变长参数定义函数。def sum(nums: Int*) = { var res = 0 for (num <- nums) res += num res}sum(1, 2, 3, 4, 5)使用序列调用变长参数在如果想要将一个已有的序列直接调用变长参数函数,是不对的。比如val s...原创 2018-11-02 16:50:28 · 168 阅读 · 0 评论 -
scala笔记-默认参数和带名参数(4)
默认参数在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数。def sayHello(firstName: String, middleName: String = "William", lastName: String = "Croft") = firstName + " &qu原创 2018-11-02 16:49:49 · 506 阅读 · 0 评论 -
scala笔记-函数入门(3)
函数的定义与调用在Scala中定义函数时,需要定义函数的函数名、参数、函数体。 我们的第一个函数如下所示:def sayHello(name: String, age: Int) = { if (age > 18) { printf("hi %s, you are a big boy\n", name); age } else { printf("hi %s, you are .原创 2018-11-02 16:49:04 · 175 阅读 · 0 评论 -
scala笔记-条件控制与循环(2)
if表达式·if表达式的定义:在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。·例如,val age = 30; if (age > 18) 1 else 0 ·可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 0 ·另外一种写法,var isAdult = -1; if(age > 1...原创 2018-11-02 16:48:26 · 252 阅读 · 0 评论 -
scala笔记-Actor(17)
Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同。Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。此外,Scala Actor的这种模型还可以避免死锁等一系列传统多线程编程的问题。Spark中使用的分布式多线程框架,是Akka。Akka也实现了类似Scala Act...原创 2018-11-05 09:04:07 · 267 阅读 · 0 评论