zoukankan      html  css  js  c++  java
  • 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] 表示只能在此包里面访问

  • 相关阅读:
    3)小案例三,加乐前端入口index.php
    C语言中传值和C++的传引用
    2)小案例步骤2,添加工厂类
    1)小案例步骤一
    1)public,provite和protect不能放在函数函数头
    88)PHP,PDOStatement对象
    NET 中system.IO(Stream) 的学习笔记二
    c#中的char byte string 类型之间的转换
    字符集和字符编码(Charset & Encoding)
    c#window服务程序
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/5452370.html
Copyright © 2011-2022 走看看