- 浏览: 599284 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Type Inference类型推断
当你声明的任何变量时,你不需要指定类型。让我们来看看下面的例子。打开REPL下输入
val number1:Int =5
结果是number1: Int = 5
val number2=5
结果是number2: Int = 5
在上面的例子在第一种情况下,我们声明的变量number1它的类型为INT(冒号后), 在第二种情况下,我们没有指定类型,Scala推断的它作为Int。 此外,在Scala中你不需要在语句尾部指定分号;
Immutability不变性
Scala语言是不变性优先,这与函数式编程的原则一致。所以,如果你不指定任何修饰符,默认情况下VAL将被使用。如果您使用var时,表示变量的值是可以改变的。
数组
数组的写法如下:
val names = Array("John","Ron","Tom")
或
val numbers = Array(1,2,3)
为访问数组中元素,直接定义索引index就可以:
scala> numbers(1)
res0: Int = 2
mkString方法可以串连数组或集合的元素:
scala> names.mkString(",")
res6: String = John,Ron,Tom
集合
Scala 支持可变和不可变集合。默认值是不可改变的,下面是集合结构:
Set
缺省你创建的Set是不可变的,如果你要创建可变的,使用导入scala.collection.mutable.Set.
上面当我们对不可变的集合增加一个元素 citySet+="SFO"时,出错。只要使用可变集合才通过。
Map
此Map非前面函数map,两者意思不同,这里是数据结构,类似Java的Map,Map也和Set类似,缺省是不可变的,可变需要导入可变的Map
List
如果List声明为不可变,你也不能增加元素:
元tuples
当你从函数返回多个值/类型时,使用元组。下面元组包含整数型和字符串两种类型。
循环和表达式
在Scala中的每个声明结果statement可以是一个表达式expression(任何声明返回的值被认为是一个表达式)。
if / else表达式的结果分配给finalNum。这是非常相似的三元运算符在Java中
for循环:
上面的for循环有副作用。没有副作用的表现应该在一个循环返回一些值,以便以后能够使用,也就是要有输出,否则如果在这个for中对集合元素进行了修改,后面的代码是不会发现的,这带来了副作用。那么使用yeild来返回值
最好的办法是用map来替代。
函数
定义一个函数如下:
说明:
函数的定义用def关键字
参数以及它们的类型一起指定(类型在名称后面)
返回参数也需要指定函数类型。在上述情况下,它是Int
函数详细定义是等号(=)后面的指定大括号内
上面的精简版如下,更显得地道:
scala> def maxoneline(a:Int,b:Int):Int = if(a > b) a else b
maxoneline: (a: Int, b: Int)Int
类和对象伴侣
Scala没有静态static概念。不过它有一个伴侣对象 Companion objec。一个同伴对象具有相同的名称作为类名。你可以直接调用它们的方法,而无需创建实例。
当你声明的任何变量时,你不需要指定类型。让我们来看看下面的例子。打开REPL下输入
val number1:Int =5
结果是number1: Int = 5
val number2=5
结果是number2: Int = 5
在上面的例子在第一种情况下,我们声明的变量number1它的类型为INT(冒号后), 在第二种情况下,我们没有指定类型,Scala推断的它作为Int。 此外,在Scala中你不需要在语句尾部指定分号;
Immutability不变性
Scala语言是不变性优先,这与函数式编程的原则一致。所以,如果你不指定任何修饰符,默认情况下VAL将被使用。如果您使用var时,表示变量的值是可以改变的。
数组
数组的写法如下:
val names = Array("John","Ron","Tom")
或
val numbers = Array(1,2,3)
为访问数组中元素,直接定义索引index就可以:
scala> numbers(1)
res0: Int = 2
mkString方法可以串连数组或集合的元素:
scala> names.mkString(",")
res6: String = John,Ron,Tom
集合
Scala 支持可变和不可变集合。默认值是不可改变的,下面是集合结构:
Set
缺省你创建的Set是不可变的,如果你要创建可变的,使用导入scala.collection.mutable.Set.
scala> val citySet = Set("LA","NY","MUM") citySet: scala.collection.immutable.Set[String] = Set(LA, NY, MUM) scala> citySet+="SFO" :9: error: value += is not a member of scala.collection.immutable.Set[String] citySet+="SFO" scala> import scala.collection.mutable.Set import scala.collection.mutable.Set scala> val citySetNew=Set("LA","NY","MUM") citySetNew: scala.collection.mutable.Set[String] = Set(MUM, NY, LA) scala> citySetNew+="SFO" res3: citySetNew.type = Set(MUM, SFO, NY, LA) scala> citySetNew res4: scala.collection.mutable.Set[String] = Set(MUM, SFO, NY, LA)
上面当我们对不可变的集合增加一个元素 citySet+="SFO"时,出错。只要使用可变集合才通过。
Map
此Map非前面函数map,两者意思不同,这里是数据结构,类似Java的Map,Map也和Set类似,缺省是不可变的,可变需要导入可变的Map
scala> val cityMap = Map(1->"Mum",2->"NY",3->"LA") cityMap: scala.collection.immutable.Map[Int,String] = Map(1 -> Mum, 2 -> NY, 3 -> LA) scala> cityMap += (4->"SFO") :10: error: value += is not a member of scala.collection.immutable.Map[Int,String] cityMap += (4->"SFO") ^ scala> import scala.collection.mutable.Map import scala.collection.mutable.Map scala> val cityMap2 = Map(1->"Mum",2->"NY",3->"LA") cityMap2: scala.collection.mutable.Map[Int,String] = Map(2 -> NY, 1 -> Mum, 3 -> LA) scala> cityMap2 +=(4->"SFO") res6: cityMap2.type = Map(2 -> NY, 4 -> SFO, 1 -> Mum, 3 -> LA)
List
如果List声明为不可变,你也不能增加元素:
scala> val list1 = List(1,2,3,4) list1: List[Int] = List(1, 2, 3, 4) scala> list1 = 5::list1 :8: error: reassignment to val list1 = 5::list1 ^ scala> var list2 = List(1,2,3,4) list2: List[Int] = List(1, 2, 3, 4) scala> list2 = 5::list2 list2: List[Int] = List(5, 1, 2, 3, 4) scala> list2.size res0: Int = 5
元tuples
当你从函数返回多个值/类型时,使用元组。下面元组包含整数型和字符串两种类型。
scala> val tup1 = (4,"SFO") tup1: (Int, String) = (4,SFO)
循环和表达式
在Scala中的每个声明结果statement可以是一个表达式expression(任何声明返回的值被认为是一个表达式)。
scala> val num1 = 4 num1: Int = 4 scala> val num2 =5 num2: Int = 5 scala> val finalNum = if(num1 > num2) num1 else num2 finalNum: Int = 5 scala> println(finalNum)
if / else表达式的结果分配给finalNum。这是非常相似的三元运算符在Java中
for循环:
scala> val array1 = Array(1,2,3) array1: Array[Int] = Array(1, 2, 3) scala> for(x:Int <- array1) print (x) 123
上面的for循环有副作用。没有副作用的表现应该在一个循环返回一些值,以便以后能够使用,也就是要有输出,否则如果在这个for中对集合元素进行了修改,后面的代码是不会发现的,这带来了副作用。那么使用yeild来返回值
scala> array1 res10: Array[Int] = Array(1, 2, 3) scala> for(x:Int<-array1) | yield(x*2) res11: Array[Int] = Array(2, 4, 6)
最好的办法是用map来替代。
函数
定义一个函数如下:
scala> def max(a:Int,b:Int):Int ={ if (a > b) a else b } max: (a: Int, b: Int)Int scala> max(3,4) res12: Int = 4
说明:
函数的定义用def关键字
参数以及它们的类型一起指定(类型在名称后面)
返回参数也需要指定函数类型。在上述情况下,它是Int
函数详细定义是等号(=)后面的指定大括号内
上面的精简版如下,更显得地道:
scala> def maxoneline(a:Int,b:Int):Int = if(a > b) a else b
maxoneline: (a: Int, b: Int)Int
类和对象伴侣
Scala没有静态static概念。不过它有一个伴侣对象 Companion objec。一个同伴对象具有相同的名称作为类名。你可以直接调用它们的方法,而无需创建实例。
class Product(n:String, p:Int) { var name :String= n var price:Int=p def this(n:String) = this(n , 200) override def toString = ( "name ="+name+", price="+price) } object Product { def computeTax(price:Int):Double = { price+price*10 } } defined class Product defined module Product scala> val p8 = new Product("product8",800) p8: Product = name =product8, price=800 scala> val tax = Product.computeTax(p8.price) tax: Double = 8800.0
发表评论
文章已被作者锁定,不允许评论。
-
Scala 在Intellij中搭建Scala环境(jdk8,scala2.11.4)
2017-06-02 16:33 14421.打开Intellij然后点击File->Plugin ... -
Scala Partial Functions(偏函数)学习
2017-04-24 10:54 344如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子 ... -
Scala 样本类(case class)和模式匹配(match)学习
2017-04-20 18:20 832样本类(case clas)和模式 ... -
Scala 作业题练习纪录
2017-04-20 14:39 10021.用reduceLeft获取集合中最大元素 println ... -
Scala 闭包理解
2017-04-20 13:57 662闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。 ... -
Scala 各种符号的含义(->,:::,::,<-,=>)
2017-04-20 09:50 650:::运算符 :::(三个冒号)表示List的连接操作,比如: ... -
Scala filter方法过滤集合元素(获取集合中的元素)
2017-04-19 14:44 2078Problem 你想要筛选出集合中的一些元素形成一个新的集合 ... -
Scala apply方法学习(类和对象都存在apply方法)
2017-04-19 10:18 731Scala比Java更面向对象的一个方面是Scala没有静态成 ... -
Scala Map(映射)学习
2017-04-18 09:20 431Map(映射)是一种可迭代的键值对(key/value)结构。 ... -
Scala 元组Tuple学习
2017-04-17 16:12 640元组是Scala提供的一种 ... -
Scala 函数之map(返回集合)、reduce、flatMap、zip和foreach(无返回值)学习
2017-04-17 15:04 2230map和flatMap的区别 object collect ... -
Scala 符号 => 的用法(匿名函数(x:Int)=>x+1)
2017-04-17 10:58 6991. 表示函数的类型(Function Type) de ... -
Scala 下划线(_)的多种应用场景学习
2017-04-13 20:00 5881、作为“通配符”,类似Java中的*。如import sca ... -
Scala mkString方法(把一个集合转化为一个字符串)
2017-04-13 19:34 1207Problem 如果你想要把集合元素转化为字符串,可能还会添加 ... -
Scala yield案例 (for 循环和 yield 的例子)
2017-04-13 18:42 629下面是摘自 《Programming in Scala》关于 ...
相关推荐
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据...通过这个项目,学习者不仅能掌握Scala的基本语法和概念,还能熟悉Spark框架的应用,从而在大数据领域建立起坚实的基础。
本课件是针对Scala学习者精心准备的资源,旨在帮助你深入理解和掌握Scala的核心概念,并进一步熟悉在Spark框架中的应用。 首先,我们从"Scala进阶之路-part01-基础.pdf"开始,这部分内容主要涵盖了Scala的基础知识...
1. Scala基础知识:这包括Scala的基本语法、数据类型、控制结构等。例如,"Getting Started" 部分通常会指导读者如何设置Scala控制台和集成开发环境(IDE),比如IntelliJ IDEA或Eclipse。这部分内容还会引导你编写...
在"code"这个文件夹中,你可能会找到一些基本的Scala程序,例如"Hello, World!"示例,或者可能包含一些更复杂的案例,如函数定义、类和对象的创建、集合操作、模式匹配的使用,甚至是Actor系统的简单实现。通过研究...
这些章节涵盖了Scala的基础概念,如基本语法、类型系统、对象和类、模式匹配、函数和高阶函数等。对于初学者来说,这些章节提供了很好的指导,帮助他们快速上手Scala编程。 "面向Java开发人员的Scala指南-p178.pdf...
通过这个压缩包中的学习资源,你可以逐步探索Scala的世界,从基本概念到高级特性的运用,再到设计模式的实践,逐步成长为一名熟练的Scala开发者。无论你是初学者还是有经验的程序员,这个资料集都将是你学习Scala的...
Scala与Spark的结合,让Scala的学习者有机会接触到大数据生态圈中的Hadoop、Hive、HBase等重要工具和概念,为未来进入大数据行业打下坚实的基础。 综上所述,Scala语言不仅有其独特的编程魅力,还因大数据技术的...
在 Scala 编程中,基础概念包括变量、常量、数据类型(如基本类型Int、Double、String,以及类类型和集合类型)、控制结构(如if-else语句、for循环、while循环)以及函数。变量在Scala中是不可变的,这意味着一旦...
在MHT文件中,你可能会找到关于这些概念的教程、示例代码或者讲解,帮助你从基础到进阶逐步掌握Scala。学习过程中,建议先了解基本语法,然后通过编写简单的程序实践,再逐步接触更复杂的特性和框架。同时,参与开源...
本资源摘要信息为 Scala 入门学习教程,旨在帮助读者快速掌握 Scala 语言的基本概念和编程技术。该教程面向具有一定编程经验的读者,尤其是 Java 语言的开发者。 知识点一:Scala 语言简介 Scala 语言是一种现代化...
同时,Scala也吸收了现代函数式编程语言的设计特点,包括不可变数据、函数作为一等公民等概念。 Spark是使用Scala编写的大数据处理框架,它能够以接近内存的速度处理大规模数据集。学习Scala对于想要深入学习和利用...
1. 面向对象编程:Scala支持类、接口、继承和多态等面向对象概念。与其他面向对象语言不同,Scala中的类和对象是统一的,任何定义都可以被视为对象,而任何方法都可以视为函数,这使得代码更加简洁和灵活。 2. 函数...
6. **机器学习算法**:理解基本的机器学习概念,如监督学习、无监督学习、分类、回归、聚类和降维。掌握常见的算法,如线性回归、逻辑回归、支持向量机、决策树、随机森林、神经网络和深度学习模型,并了解如何在...
1. **基本语法与数据类型**:Scala有丰富的数据类型,包括基本类型(如Int、Double、Boolean等)和复合类型(如Array、List、Set、Map)。此外,Scala还支持模式匹配,这是其语法的一大特色。 2. **类与对象**:...
通过章节习题和答案,学习者可以深入理解Scala的核心概念和技术。 首先,我们从标题中可以看到,这是一套针对Scala的学习资料,包含“习题”和“答案”,旨在帮助用户快速掌握Scala。"快学"表明这套资料注重效率,...
在这里,你会学习到Scala的安装与环境配置,理解Scala的基本语法,包括变量声明、数据类型(如基本类型、引用类型和集合类型)、控制结构(如条件语句和循环)以及函数定义和调用。此外,还会介绍Scala中的模式匹配...
本文将深入探讨Scala的基本概念、发展历程及其独特之处。 #### 一、Scala的诞生背景 Scala的诞生可以追溯到Martin Odersky早期的研究工作。在Java发展初期,Odersky提出了一种名为GJ的编译器,该编译器后来成为Sun...