Scala学习笔记(未完)

1、for循环格式
for(i <- 1 to 10){print(i)}

2、懒加载 lazy val a = 1; 直到用时才会加载

3、方法的声明格式 def(x:Int,y:Int) : Int ={} 最后一个冒号后面是返回类型,不加则没有返回值

4、默认参数 def loadConf(conf : String = "default"){ print(conf)} 如果不传入参数 ,则默认使用default的数值

5、变长参数 def sun(elems: Int*){ } 可以传入 更多的参数

6、异常处理 scala 使用了模式匹配
try{

}catch{
case e: Exception => System.err.print(e)
case_ => //should never happen
}finally {

}

7、定长数组 val array_name = new Array[String](5),也可以 val a = Array("Jack","Lucy") 直接指定String类型的初始化值

8、变长数组 val a = scala.collection.mutable.ArrayBuffer[Int]() a+=1 a+=2 a+=(3,4,5) a++= Array(6,7,8) 就可以将数值甚至数组加入数组
也可以使用insert a.insert(num) , a.remove(num); a.toArray 就是将变长数组变成定长数组 然后再可调用sum max min 等#
a.trimEnd(num) 可以将后num个数去掉

9、遍历数组
val a = Array(1, 2, 3, 4, 5, 6, 7, 8)
for (elem <- a) {
println(elem)

}

for(i <- 0 until a.length){
print(a(i))
}

10、Map(可变和不可变)

val age = Map("Jack" -> 20,"Lucy" -> 18)
//获取key为Jack的值age("Jack")
//倘若不存在,则会报错,所以用 age.getOrElse("Jack",0) 如果不存在,则默认赋予一个值 或者使用age.get("Jack") 不过如果不存在值,获取的为null
//插入元素可以使用 age("aa") = 2 则会将key为aa,值为2的值插入age的Map中 age += ("BB" ->3,"CC" ->4) 删除 直接 age -="AA"

//迭代map
val m = Map("jack" -> 20,"BB"-> 3,"CC" -> 4,"Lucy" ->18)

for((k,v) <- m){
println("key is" + k + ",value is " + v)
}
//只获取key的集合 m.keySet 只获取value的集合 m.values

11、元祖 val a = (1,3,4,5,6,8) 访问方式 下标从1开始。 a._1 就表示第一个元素

Scala面向对象

object Basic2 {
def main(args : Array[String]){
val p = new Person //没有参数的对象 可以不加()
p.name = "Jack"
println(p.name +":"+p.age)

val p = new Person("Jacky",20,"male")
print(p.name +":" + p.age + ":" + p.gender)
}
}

class Person{
var name : String = _ //没有参数 会自动生成getter和setter方法
val age = 10 //这种只会生成getter方法
}

//主构造器 直接跟在类名后面,朱构造器中的参数,最后会被编译成字段。
//朱构造器执行的时候,会执行类中的所有语句
//假设参数声明时不带val和var,那么相当于private[this]
val p = new Person("Jacky",20)
print(p.name +":" + p.age)

class Person(val name:String,val age :Int){
println("this is the primary constructor!")
}

class Person(val name:String,val age :Int){
println("this is the primary constructor!")
var gender : String = _
//附属构造器名称为this,每一个附属构造器必须先调用已经存在的子构造器或者附属构造器
def this(name : String,age : Int,gender : String){
this(name,age)
this.gender = gender

}

抽象类
trait 接口中可以写实现类

trait ConsoleLogger{
def log(msg : String): Unit ={
println("save money:" + msg)
}
}

trait MessageLogger extends ConsoleLogger{
override def log(msg : String): Unit ={
println("save money to bank" + msg)
}
}

abstract class Account{
def save
}

class MyAcount extends Account with ConsoleLogger{
def save: Unit ={
log("100")
}

Apply 静态的方法可以定义一个object 就为静态方法 Scala中没有static关键字

class ApplyTest {
def apply() = "APPLY"
def test: Unit ={
println("test")
}
}

object ApplyTest{
def static: Unit ={
print("i‘m a static method")
}

def apply() = new ApplyTest
}

object Basic4 extends App{
//ApplyTest.static
//在调用ApplyTest的时候 已经new了
val a = ApplyTest()
//调用的是 object的方法
a.test

val t = new ApplyTest
//调用的是类的apply方法
print(t())

模式匹配

val value = 1
val result = value match{
case 1 => "one"
case 2 => "two"
// _代表了通配符 所以不需要break
case _=> "some other number"
}
println("result of match is :" + result)

val result2 = value match{
case i if i==1 =>"one"
case i if i==2 =>"two"
case _ => "some other number"
}

文件读取
val file = Source.fromFile("/usr/local/yangsiyi.txt")
for(line <- file.getLines()){
println(line)
}

获取网络内容 适用于爬虫
val file1 = Source.fromURI("http://www.baidu.com")

这种方式是按字符打印
for(c <- file){
println(c)
}

字符串追加
val a = "Yes"
s"$a, I Do !"
print(s"$a, I Do !")

private[Spark] 表示只能在此包里面访问

时间: 2024-10-14 19:00:59

Scala学习笔记(未完)的相关文章

w3school之JavaScript学习笔记-未完待续

在前端测试过程中,少不了听到开发说到JS,JS在webJavaScript 是浏览器脚本语言(简称JS),主要用来向HTML页面添加交互行为. 学习网址:http://www.w3school.com.cn/js/js_intro.asp 写入HTML输出 document.write("html元素") 对事件作出反应 <button type="button" onclick="alert('Welcome!')">点击这里<

w3cschool之HTML学习笔记-未完待续

由于html标记语言是网页自动化测试所必须要掌握的,所以重新学习html语言(这似乎是我第四次学习html,这次得坚持了) 学习网址:http://www.w3school.com.cn/html/index.asp HTML 指的是超文本标记语言 (Hyper Text Markup Language),用来描述网页的.Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们.浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容. HTML文档是由HTML元素定义的.HTM

Less学习笔记(未完待续)

     作为 CSS 的一种扩展,Less 不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法.这样的设计使得学习 Less 很轻松,而且你可以在任何时候回退到 CSS(摘自官网) 1.变量    Less通过@来定义变量:Less中的变量为完全的常量,所以只能被定义一次 @base: #f938ab; div { background: @base; padding: 50px; } p { color: #ff0; } 2.混合(Mixin) 混合可以将一个定义好的clas

BootStap学习笔记(未完待续)

移动设备优先:  为了让开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的head之中添加viewport meat标签:如下: <metaname="viewport"content="width=device-width, initial-scale=1.0"> 响应式图像: 通过对图像添加class="img-responsive"可以让图像对响应式布局设计的更好: 伪元素 http://www.w3school.

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

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

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

Scala与Java具有许多相似之处,但又有许多不同.这里主要从一个Java开发人员的角度,总结在使用Scala的过程中所面临的一些思维转变.这里只是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.下面列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码示例及详细阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接: 语句可以不用";"结束,且推荐不适用";": 变量声明时以var或val开头

原创:Scala学习笔记(不断更新)

Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中. 递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(

Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合

前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: 1:声明val变量:可以使用val来声明变量,用来存放表达式的计算结果,但是常量声明后是无法改变它的值的,建议使用val来声明常量: 声明var变量:如果要声明可以改变的引用,可以使用var变量,声明的常量的值可以改变. 3:指定类型:无论声明val变量还是声明var变量.都可以手动指定其类型,如果不指定,scala会自动根据值,进行类型

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr