zoukankan      html  css  js  c++  java
  • Scala类型声明与定义、函数定义、流程控制、异常处理

    Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
    Scala的基础类型基本与javascript一致。

    Scala的数据类型全部相同于Java中,具有相同的内存占用和精度。以下表是有关可在Scala中所有的数据类型的细节:

    数据类型描述
    Byte 8位有符号值。范围从-128到127
    Short 16位有符号值。范围从-32768至32767
    Int 32 位有符号值。范围从 -2147483648 to 2147483647
    Long 64位有符号值。 从-9223372036854775808到9223372036854775807
    Float 32位IEEE754单精度浮点数
    Double 64位IEEE754双精度浮点数
    Char 16位无符号Unicode字符。范围由U+0000至U+FFFF
    String 字符序列
    Boolean 无论是字面true或false字面
    Unit 对应于没有值
    Null 空或空引用
    Nothing 每一个其他类型的子类型; 包括无值
    Any Any类型的超类型;任何对象是任何类型
    AnyRef 任何引用类型的超类型

    变量声明

    Scala的变量声明有不同的语法,它们可以被定义为值,即,常量或变量。下面是使用var关键字来定义一个变量的语法:

    var myVar :String="Foo"

    在这里,myVar使用关键字var声明。这意味着它是一个可以改变值的变量,被称为可变变量。下面是使用val关键字来定义变量的语法:

    val myVal :String="Foo"

    这里,myVal是使用关键字val声明。这意味着,它是不能改变的变量,这是所谓的不可变变量。

    变量数据类型:

    变量类型在变量名后面指定,前在equals之前签署。可以通过它的数据类型定义任何类型的Scala变量如下:

    val or val VariableName:DataType[=InitialValue]

    如果不指定任何初始值变量,那么如下所示它是有效的:

    var myVar :Int;
    val myVal :String;

    变量类型推断:

    当分配一个初始值给一个变量,Scala编译器可以计算出根据分配给它的值的变量类型。这就是所谓的变量类型推断。因此,可以写这些变量的声明如下这样:

    var myVar =10;
    val myVal ="Hello, Scala!";

    在这里,默认情况下,myVar是int类型

    方法定义如下:
    函数定义与python有点巧像,唯一奇葩的时,参数名放类型前面,加:隔开。返回值跟在函数参数之后。
    有点搞特殊。
     
    def f(x: Int) = { x*x }
    def f(x: Any): Unit = println(x)
     
    无参数的函数调用时可以省略括号。
    names foreach (n => println(n))
    names mkString ","
    optStr getOrElse "<empty>"
     
     
    def add(i:Int,j:int):int{
        return i+j
    }
     
    变长参数
    def add(x:Int*) = {
        for(i <- x) {
            println(i)
        }
        x.sum
    }
    def main(args:Array[String]):Unit{
        add(10,10,10)
        add(1 to 10: _*)
    }
     
    Scala如何定义静态方法:  Scala默认没有静态方法,如果需要静态方法,可以通过定义Object类,在Object里面定义方法(看后面文章)。
    Scala和c++一样,都具有默认参数,和python类型,可以指定参数赋值。唯一不同的就是他的变长参数。
     

     
    for( i <- 1 to 10 if i % 2 == 0) {
        println(i)
    }
     
    for(i <- 0 until Array.lenth){
        println(i)
    }

    for(i <- 0 to 10 reverse)print(i)

     
    val foo = for (x <- 0 until (10, 2)) yield x
     
    for (i <- Array_name) {
        //todo
    }
    scala> 1.to(10)
    res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,
     9, 10)
    scala> 1.until(10)
    res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
     
     
    同样的,也可是是异常处理的。
    scala中德模式匹配不仅仅可以对模式进行匹配,还可以对case class/object(最最重要的) ,还有类型匹配。(向上/下类型)转化都可以匹配。

    scala中的match语句用来在一个列表中选择某一个分支来执行分支的语句块,类似于其他语言中的swtich..case语句

    下面是一个简单的例子

    var myVar ="theValue";
    myVar match {
       case"someValue"   => println(myVar +" 1");
       case"thisValue"   => println(myVar +" 2");
       case"theValue"    => println(myVar +" 3");
       case"doubleValue"=> println(myVar +" 4");}
    有些时候case 要捕获一些默认情况.
    第一种值匹配
    第二种类型配置
    第三种,Array,list等容器的匹配
    第四种,case calss样式类
  • 相关阅读:
    js实现图片上传前预览
    WPF实现鼠标拖动控件并带有中间动效
    Redis 挂了自动重启的shell 脚本。
    PIE-Basic教程目录索引
    从零实现Linux一键自动化部署.netCore+Vue+Nginx项目到Docker中
    在BlazorWebAssembly中使用Autofac
    angular报错:Cannot assign to a reference or variable
    ASP.NET Core Logging Solution
    Typora + PicGo-Core + Custom Command 实现上传图片到图床
    mysql like多个
  • 原文地址:https://www.cnblogs.com/nethk/p/5609248.html
Copyright © 2011-2022 走看看