• Scala--对象


    一、单例对象

    Scala没有静态方法或静态字段,可以用object来达到相同的目的

      object Account{
        private var num = 0
        def number() ={ num += 1; num}
      }
    
      println(Account.number())
      println(Account.number())

    结果

    1
    2

    在Scala中可以用对象来实现:

    • 作为存放工具函数或常量的地方
    • 高效的共享单个不可变实例
    • 需要用单个实例来协调某个服务(单例模式)

    二、伴生对象

    如果用到即有实例方法又有静态方法的类,在scala中,你可以通过类和与类同名的 "伴生" 对象来达到同样的目的。

    类和它的伴生对象可以互相访问私有特性。它们必须存在于同一个源文件中。

      class Account{
        val id = Account.number()
        println(id)
      }
    
      object Account{
        private var num = 0
        def number() ={ num += 1; num}
      }
    
      println(Account.number())
      println(Account.number())
      val c = new Account()

    结果

    1
    2
    3

     

    三、扩展类或特质的对象

    四、apply方法

    Array(100) 和 new Array(100)

    Array(100)  调用的是apply(100),  Array[Int]单个元素100;

    new Array(100) 调用的是构造器 this(100), Array[Nothing] 包含100个null元素;

    apply方法通常返回的是伴生类的对象。

    五、应用程序对象

    每个scala程序必须从一个对象的main开始

    object Test {
        def main(args: Array[String]) {
            println("Hello")
        }
    }

    除了这种方式,也可以扩展App特质

    object Test extends App{
        println("Hello")    
    }
    object Test extends App{
      if(args.length>0)
        println("Hello,"+args(0))
      else
        println("Hello World")
    }

    通过args获取命令行参数

    $scalac Hello.scala
    $scala -Dscala.time Hello Fred
    Hello, Fred
    [total 4ms]

    指定参数scala.time,程序退出时会显示使用的时间

    六、枚举

      object color extends Enumeration{
        //val Red,Green,Yellow = Value
        val Red = Value(0,"stop") //id为0 name为stop
        val Yellow = Value(10)   //id为10 name为Yellow
        val Green = Value("go") //id为11 name为go
      }
    
      for(i<-color.values) println(i.id+" "+i)
    
      println(color(0))
      println(color.withName("stop"))

    结果

    0 stop
    10 Yellow
    11 go
    stop
    stop

    4.

        class Point(val x:Int,val y:Int){
        }
    
        object Point{
          def apply(x:Int,y:Int)= new Point(x,y)
        }
    
        val p = Point(3,4)
        println(p.x)

    5.

    object Chapter6 extends App{
      for(i<- (0 until args.length).reverse) println(args(i))
    }

    6.

      object Poker extends Enumeration{
        val one = Value(1,"1")
        val two = Value(2,"2")
        val three = Value(3,"3")
        val four = Value(4,"4")
      }
      for(c<- Poker.values) println(c.id +":"+c.toString)

    7.

      object Poker extends Enumeration{
        val one = Value(1,"1")
        val two = Value(2,"2")
        val three = Value(3,"3")
        val four = Value(4,"4")
      }
      for(c<- Poker.values) println(c.id +":"+c.toString)
    
      import Poker._
      def check(pok : Poker.Value): Unit ={
        if (pok == one) println("Yes")
      }
      check(one)

    参考《快学Scala》

  • 相关阅读:
    设计模式之_6大设计原则(转)
    Django-ORM多表操作(进阶)
    03-django模型(1)
    02-Django基础知识
    web开篇
    body标签中的相关标签
    01-前端初识
    Flask简述
    浅析设计模式
    Python的单例模式
  • 原文地址:https://www.cnblogs.com/one--way/p/5800481.html
Copyright © 2020-2023  润新知