今天的阅读任务放在睡前去做,因此在写这篇博客的时候我还没有完成阅读任务。
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下还有两个底层类:Null和Nothing。Null是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程序停止运行,再次重启之后又好了:
具体原因还在查询,个人感觉跟图片大小有关系。。。。