前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala学习笔记

Scala学习笔记

作者头像
用户3003813
发布2018-09-06 14:03:47
2440
发布2018-09-06 14:03:47
举报
文章被收录于专栏:个人分享

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] 表示只能在此包里面访问

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-05-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档