zoukankan      html  css  js  c++  java
  • scala编程笔记(三)类,字段和方法

    类,字段和方法

    类是对象的蓝图,能够通过new来创建对象。在类的定义里能够有字段和方法。统称member

    val还是var都是指向对象的变量(var定义的字段可又一次赋值),def定义方法,包括可运行代码

    class ScalaSingleton {
        var sum = 0;
    }
    

    这里定义类之后创建对象使用了。虽然这里是val,可是对象的变量是能够又一次赋值的

    def main(args: Array[String]) {
            val singleton = new ScalaSingleton()
            println(singleton.sum)
            singleton.sum = 5;
            println(singleton.sum)
        }
    

    1,scala默认是public级别
    2,scala的參数都是val类型,因此不可再方法体内又一次赋值
    3。简洁性
    先来个计算的 V1.0版的代码

    class ScalaSingleton {
        private var sum = 0;
    
        def add(b: Byte): Unit = {
          sum += b
        }
    
        def checksum(): Int = {
          return ~(sum &0xff) + 1
        }
    }
    

    1,在scala中假设没有不论什么显示的返回语句。将返回方法中最后一次计算得到的值
    2,假如某个方法仅计算单个结果表达式,能够去掉花括号,如是scala代码就变成了这样

    class ScalaSingleton {
        private var sum = 0;
        def add(b: Byte): Unit = sum += b
        def checksum(): Int = return ~(sum &0xff) + 1
    }
    

    看起来仅占用了一行。另外

    def add(b: Byte): Unit = sum += b
    

    事实上能够去掉返回类型Unit 与等号 写成

    def add(b: Byte) { sum += b}
    

    这里来看看以下几个写法

    def gUnit():Unit = {"Unit"}
    println("gUnit():Unit = {"Unit"}:"+gUnit)
    def gUnit1() {"Unit1"}
    println("gUnit1() {"Unit1"}: " + gUnit1)
    def gStr() = {"String"}
    println("gStr() = {"String"}: "+gStr)
    

    执行后返回值是这样子的

    gUnit():Unit = {"Unit"}:()
    gUnit1() {"Unit1"}: ()
    gStr() = {"String"}: String
    

    这里有一点就是:带有花括号的,可是无等号的会被专程Unit类型,从而得不到我们想要的返回类型,因此想要得到想要的返回 类型“=”等号是不能少的

    分号判断

    多行语句中,分毫是必须的,通常行尾能够觉得是一个分号,操作符通常应该是在行尾,而不能是行头

    singleton

    Scala中不能定义静态成员。取而代之定义单例对象
    class 定义,注意包名差别

    package com.luyee.scala.classpkg
    class ScalaSingleton {
        private var sum = 0;
        def add(b: Byte): Unit = sum += b
        def checksum(): Int = return ~(sum &0xff) + 1
    }
    

    Obj定义

    package com.luyee.scala
    
    import scala.collection.mutable.Map
    
    object ScalaSingleton {
    
      private val cache = Map[String, Int]()
        def calculate(s: String):Int = 
        if(cache.contains(s)){
          cache(s)
          println("contains"+ cache)
          cache(s)
        }else{
          println("else"+ cache)
          val singleton = new com.luyee.scala.classpkg.ScalaSingleton()
          for(c  <- s)
            singleton.add(c.toByte)
          val cs = singleton.checksum()
          cache += (s -> cs)
          cs
        }
    
        def main(args: Array[String]) {
        ScalaSingleton.calculate("2")
        ScalaSingleton.calculate("2")
        ScalaSingleton.calculate("2")
        ScalaSingleton.calculate("2")
    }
    }
    

    最后的输出结果:

    not contains: Map()
    contains: Map(2 -> -50)
    contains: Map(2 -> -50)
    contains: Map(2 -> -50)
    

  • 相关阅读:
    thinkphp tp5 常用 functions
    nginx配置虚拟机 vhost 端口号 域名 区分虚拟机
    thinkphp tp5 模板 引擎 字符串 截取 函数 省略 显示
    C++运算符重载
    c++纯虚函数
    c++面向对象模型---c++如何管理类,对象以及它们之间的联系
    c++多态
    c++友元函数
    c语言的函数指针
    c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5345315.html
Copyright © 2011-2022 走看看