zoukankan      html  css  js  c++  java
  • 寒假学习日报(十六)

      今天的阅读任务放在睡前去做,因此在写这篇博客的时候我还没有完成阅读任务。

      Scala:

      今天主要是学习了关于变量的一些知识,在视频的讲解下简单了解Scala对变量的设定。

    首先是一些零碎的知识点:

    package com.chapter01.vars
    
    object VarDemo01 {
      def main(args: Array[String]): Unit = {
        var age: Int = 10
        var sal: Double = 10.9
        var name: String = "QUX"
        var isPass: Boolean = true
        //scala中小数默认为Double类型,整数默认为Int,定义为Float类型末尾必须有f
        var score: Float = 73.8f
        println(s"$age $isPass")
      }
    }
    package com.chapter01.vars
    
    object VarDemo02 {
      def main(args: Array[String]): Unit = {
        //类型推导
        var num = 10 //num为Int类型
        //证明方式1:IDEA的提示
        println(num)
        //证明方式2:isInstanceOf判断类型
        println(num.isInstanceOf[Int])
    
        //Scala是强数据类型语言,一旦确定类型之后就不能修改
        //num = 1.1会报错
    
        //var修饰的变量可修改,val不可修改,val反编译时等同于加了final
        //val无线程安全问题,效率高,推荐使用,若需要改变变量,则改用var
        var age = 20
        age = 21  //OK
        val a = 10
        //a = 11报错
    
        val dog = new Dog
        //dog = new Dog报错,因为是val类型不能再分配。
    
        //但由于Dog内的属性是var类型,是可以更改的:
        dog.age = 10
        dog.age = 20
        dog.name = "Tony"
        dog.name = "Sum"
      }
    }
    class Dog{
      //声明一个属性,给定默认值,默认值为_
      var age: Int = _
      var name: String = _
    }
    package com.chapter01.vars
    
    object VarDemo03 {
      def main(args: Array[String]): Unit = {
        //声明变量时必须要初始化,不可省略,默认值可以为_
        //Scala中数据类型都是对象
        var num1: Int = 10
        //Int是一个类,它的实例就可以使用很多方法
        println(num1.toDouble + "	" + num1.toString + 100.toFloat) //类型强转方法
        //Scala中如果一个方法没有形参,则可以省略括号
        sayHi
        sayHi()
      }
    
      def sayHi(): Unit = {
        println("say hi")
      }
    }

     可以看到Scala对变量的设定与Java有一定的差别,为了能够结合函数式编程,Scala在数据类型的设定上要更加繁琐一些:

    Scala根类型称为Any,其下分为两个类型:值类型AnyVal(Byte,Int,Long,Float,Double,StringOps,Char,Unit,Boolean等)引用类型AnyRef。引用类型下又分为三大类:

    Scala collections:Scala下的集合,Scala对集合的应用可以说是用到了极致,而且是在java基础上进行了扩展

    all java classes:传统java类

    Other Scala classes:自定义类

    此外,Scala下还有两个底层类:NullNothingNull是AnyRef的子类,Nothing是所有类的子类(AnyVal+AnyRef)。这么设计的好处,以Nothing为例,它是最底层的类,所以可以赋给任何一个变量,也可以被任何一个函数使用。最简单的例子:抛出异常(throw)就可以通过Nothing完成:

    package com.chapter01.datatype
    
    object TypeDemo01 {
      def main(args: Array[String]): Unit = {
        println(sayHello)
        //类型转换使用(低精度转换)
        var num1 = 1.6  //Double类型
        var num2 = 3.6f //Float类型
        num2 = num1.toFloat //将Double类型转换成Float类型
      }
    
      //假设开发中有一个方法就会异常中断,此时可以返回Nothing
      //使用Nothing返回时说明该方法没有正常的返回值
      def sayHello: Nothing = { //此处Nothing改成Unit也成立
        throw new Exception("出现ERROR")
      }
    }

     使用Nothing去抛异常的话,就不用顾忌在抛的过程中类型的问题,因为Nothing可以赋给任何变量。

      OpenCV

     第一步图片读取是没有问题的:

    #使用opencv读取图片与展示
    import cv2
    img = cv2.imread('image0.jpg',1)#第一个参数是图片名称,第二个参数指定显示类型,0为灰色,1为彩色
    cv2.imshow('image',img)#第一个参数是窗体名称,第二个是图片内容
    cv2.waitKey(0)

     第二步图片写入,一开始出现了“内核正忙”的错误,停滞了十多分钟。

    #图片写入
    import cv2
    img = cv2.imread('image0.jpg',1)
    cv2.imwrite('image1.png',img)

    后来报出了Python程序停止运行,再次重启之后又好了:

     

     具体原因还在查询,个人感觉跟图片大小有关系。。。。

  • 相关阅读:
    用webservice实现的一个天气预报程序
    让VS.net2005手机模拟器上网
    EVC4.0 PPC2003 Emulator 转中文版
    BSTR转CString
    在pocket pc 2003上播放声音
    VC++.net 2005 SmartDevice 屏幕转向
    c#.net2005 调用evc4.0生成的dll文件
    Json
    adb 命令模拟按键事件
    bat 截取字符
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/14327215.html
Copyright © 2011-2022 走看看