zoukankan      html  css  js  c++  java
  • 快学Scala 1

      1.  Scala解释器读到一个表达式,对它进行求值,将它打印出来,接着再继续读下一个表达式。这个过程被称作“读取-求值-打印-循环”,即REPL

      2.  从技术上来讲,scala程序并不是一个解释器,实际发生的是:你输入的内容被快速地编译成字节码,然后这段字节码交由Java虚拟机执行。

      3.  声明值和变量

      val answer = 8 * 5 + 2  //val定义常量

      answer:Int = 42

      var counter = 0 //var声明变量

      counter = 1 //ok,可以改变一个var

    不需要给出常量或变量的类型,这个信息可以从初始化它的表达式推断出来;必要的时候,也可以指定类型。

      val greeting : String = "Hello"  //变量或函数的类型总是在变量或者函数名称的后面

    在变量声明或者复制语句后,不需要使用分号。仅当同一行代码中存在多条语句时才需要分号隔开

      val xmax, ymax = 100//多个值或变量可放在一起声明

      var greeting, message : String = null

    4.Scala中常用数据类型有7种:Byte、Char、Short、Int、Long、Float、Double、Boolean,这些类型都是。Scala还提供了RichInt、RichDouble、RichChar等,具备更多的便捷方法。还有BigInt和BigDecimal类,用于任意大小(但有穷)的数字。

      1.toString() //产生字符串"1";可以使用Tab键补全使用的方法名

      1.to(10)  //产出Range(1,2,3,4,5,6,7,8,9,10),1先被转化为RichInt,然后再应用to方法。

    在Scala中,我们不需要包装类型。在基本数据类型和包装类型之间的转换是Scala编译器的工作。例如:创建一个Int数组,最终在虚拟机中得到的是一个int[]数组。

      在Scala中,我们使用方法,而不是强制类型转换,来做数值类型之间的转化。例如99.44.toInt得到90,99.toChar得到'c',"99.5".toDouble
    得到99.5,toString将任意对象转换成字符串。

    5.算数和操作符重载

      Scala的算术操作符和Java中预期的效果是一样的,特别的是这些操作符实际上是方法。例如:

        a + b 是如下方法调用的简写:

        a .+(b)

    通常可以用  a 方法 b  作为  a.方法(b)   的简写,这里的方法是一个带有两个参数的方法(一个隐式的和一个显式的)。例如: 1.to(10) 可以写成 1 to 10

      Scala并没有提供++和--操作符,使用+=或者-=:

        counter += 1   (无法简单地实现一个名为++的方法,因为Int类是不可变的,这样一个方法并不能改变某个整数类型的值。)

    6.调用函数和方法

      除了方法外,Scala还提供函数。相比Java,Scala中使用数学函数更为简单,不需要从某个类调用它的静态方法

        sqrt(2) //将产出1.4142135623730951

        pow(2,4)  //将产出16.0

        min(3,Pi)//将产出3.0

      这些函数时scala。math包中定义的。使用如下语句引入

        import  scala.math._  //在Scala中,_ 字符是通配符,类似Java中的*

         import  包名._    即可

      Scala没有静态方法,不过它有个类似的特性,叫做单例对象(singleton object)

      通常一个类对于有一个伴生对象(companion object),其方法就跟Java中的静态方法一样。例如:BigInt类的BigInt伴生对象有一个生成指定位数的随机素数的方法probablePrime:

        BigInt.probablePrime(100,scala.util.Random)

      BigInt.probalbePrime这样的调用和Java中的静态方法调用和类似。

      这里的Random是一个单例的随机数生成器对象,而该对象是在scala.util包中定义的。这里是单例对象比比类更好的为数不多的场景之一。在Java中,为每个随机数都构造出一个新的java.util.Random对象是一个常见的错误。

      不带参数的Scala方法通常不使用圆括号()。

        "Hello".distinct  //获取字符串中不重复的字符,StringOps类中的方法

      一般来说,没有参数且不改变当前对象的方法不带圆括号。

    7. apply方法

        在Scala中,我们通常都会使用类似函数调用的语法。例如:

      如果s是一个字符串,那么s(i)就是该字符串的第i个字符。(在Java中你会写s.charAt(i))

        "Hello"(4)//将产出'o'

      你可以把这种方法当做是()操作符的重载形式,它背后的实现原理是一个名为apply的方法。例如,在StringOps类的文档中,你会发现这样一个方法:

        def apply(n : Int) : Char

        也就是说,"Hello"(4)是如下语法的简写:

        "Hello".apply(4)

      如下调用

        BigInt("1234567890")

      是如下语法的简写:

        BigInt.apply("1234567890")

      这个语句产出一个新的BigInt对象,不需要使用new。

      像这样使用伴生对象的apply方法是Scala中构建对象的常用手法。例如,Array(1,4,9,16)返回一个数组,用的就是Array伴生对象的apply方法。

    8. Scaladoc

       Scaladoc中每个类名旁边的O和C分别链接到对应的类(C)或伴生对象(O)。

       数学函数位于scala.math包中。

       标记为implicit(暗示的)的方法对应的是自动(隐式)转换。

       方法可以以函数作为参数:def count(p: (Char) => Boolean) : Int//count 方法需要传入一个接受单个Char并返回true或者false的函数。

       Range和Seq[Char]一个是数字区间,一个是字符序列。

       

  • 相关阅读:
    C#图形编程
    深入浅出话事件(上)
    .NET名称空间对应的类集
    Equals() 和运算符 == 的重写准则(C# 编程指南)
    Implement EventArgs
    CLS(公共语言规范)的CLSCompliant(跨语言调用)
    学习MSCOREE.dll是托管程序的入口点
    设计模式之原型模式代码示例
    The disk cannot be added to Cluster Shared Volumes because it does not have any suitable partitions
    RAID小结
  • 原文地址:https://www.cnblogs.com/yongwangzhiqian/p/4548712.html
Copyright © 2011-2022 走看看