zoukankan      html  css  js  c++  java
  • Scala学习笔记

    笔记内容比較杂!

    1.Scala中的单例对象使用object修饰。类似于C++中的静态类。

    调用其内部函数时,直接使用对象名调用,不能用new申请!


    2.一个文件里能够定义名称同样的类和单例对象。单例对象被称作是类的伴生对象(Companion Object)。

    二者能够相互訪问彼此的私有成员。

    伴生对象能够理解为是同样名称的类的静态成员函数。


    3.Scala文件名称不须要与类名同样。可是最好是一样的。方便维护、编程。


    4.定义一个变量时。一定要以val或var修饰:
    var hw =new helloworld("Hi,my name is lming_08")

    var表示变量,val表示常量


    Scala会自己主动判别类型为helloworld型。当然也能够指定类型。
    var hw:helloworld =new helloworld("Hi,my name is lming_08")

    5.定义一个方法
    scala> def max(x: Int, y: Int): Int = if (x < y) y else x
    max: (Int,Int)Int
    冒号后面的Int是结果类型。假设定义的方法是递归型的,那么就必须显示地指定方法的结果类型。

    普通的方法,编译器是能够猜測出结果类型的。注意:參数类型是必须显示地指定。当方法体涉及到多条语句时。你须要用{}括起来。


    函数内部定义函数:
    // 函数内部定义函数
      def squreInc(x : Int) = {
        def squre(a : Int) = a * a
        squre(x) + 1
      }
    或者定义匿名函数
    // 函数内部定义匿名函数
      def squreInc2(x : Int) = {
        val squre = (a : Int) => a * a
        squre(x) + 1
      }

    话说匿名函数与python中的lambda表达式是惊人的相似!
    >>> func = lambda x : x + 1
    >>> func(1)
    2


    假设一个函数是不带參数的,那么  在定义时能够(或不能够)去掉括号,运行时去掉括号
    scala> def func = 1+2
    func: Int
    
    scala> func
    res0: Int = 3




    6.循环的使用
    def arrLoop(arr:Array[String])={
        arr(0)="abc"
        arr(1)="123"
        arr(2)="ABC"
        for(elem<- arr)
          println(elem+", hello")
      }
      def arrLoop2(arr:Array[String])={
        arr(0)="+abc"
        arr(1)="+123"
        arr(2)="+ABC"
        arr.foreach(elem => println(elem))
      }
      def arrLoop3(arr:Array[String])={
        arr(0)="-abc"
        arr(1)="-123"
        arr(2)="-ABC"
        for(i <- 0 to arr.length -1){
          println(arr(i))
        }
      }
    
    针对第三种下标for循环,除了to还有until, 表示[0, arr.length-2]

    7.Array和List差别
    Array是一个可变对象的序列,在实例化后不能更改Array的长度,可是能够改变其元素的值;
    而List是不可变对象的序列。更加面向函数式。Scala List与Java List(java.util.List)也是不同的。Scala List是不可变的,而Java List是可变的。更重要的是。Scala List更加的面向函数式编程。
    val oneTwoThree = List(1, 2, 3)


    /**************************************************************

     * 时隔一年之后再次踏上学习Scala之路 2015.08.30 22:33

     **************************************************************/

    8. Scala中能不用var变量就不用!

    原因是Scala是为并发编程而生,为函数式编程而生。所以对于Scala程序猿最好使用val变量。

    一些代替var变量的样例:

    1)原代码

     var filename = "default.txt"
      if (!args.isEmpty)
        filename = args(0)
    代替后的代码

    val filename =
          if (!args.isEmpty) args(0)
          else "default.txt"

    2)


    9.while 和do while被称作循环,而不是表达式

    scala> def greet() { println("hi") }
      greet: ()Unit
      
      scala> greet() == ()                                  
      hi
      res0: Boolean = true

    def greet() : Unit = { println("hi") }
    def greet()  = { println("hi") }


    一定要注意这里的返回值!

    千万不要写出以下的代码:

    var line = ""
      while ((line = readLine()) != ""// This doesn't work!
        println("Read: "+ line)

    10.集合操作

    http://www.artima.com/pins1ed/collections.html


    scala> val jetSet = Set("Boeing", "Airbus")
    jetSet: scala.collection.immutable.Set[String] = Set(Boeing, Airbus)
    
    scala> jetSet += "Lear"
    <console>:12: error: value += is not a member of scala.collection.immutable.Set[String]
           jetSet += "Lear"

    从这里能够清楚的看到 += 不是immutable的成员,然而件val换成var却又不报错了。why?

    这是由于换成var后。 += 会生成一个新的Set, 等价于

    var y = jetSet
    y += "Lear"

    对于Set。+会生成一个新的Set,由于类型是var, 所以会指向一个新的对象新的地址, 而val类型是不会又一次指向新地址的。

    http://stackoverflow.com/questions/5074179/val-or-var-mutable-or-immutable


    未完待续。。。


    參考资料:http://www.artima.com/scalazine/articles/steps.html

                      github练习代码

  • 相关阅读:
    Servlet-RequestDispatcher.forward方法
    Servlet---RequestDispatcher.include方法
    解决用了vertical-align: middle,但是文字图片依旧不居中的问题
    vue项目中rem适配问题
    微信小程序之使用ecarts---详细步骤
    微信公众号之input输入框获取焦点后,底部固定定位的按钮顶起问题解决办法
    微信公众号开发之解决IOS点击input 、textarea页面错位的问题
    微信小程序用navigationStyle自定义导航栏做法
    微信小程序 mpvue + picker
    PyCharm怎么整理(格式化)当前代码
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6785220.html
Copyright © 2011-2022 走看看