人工智能图像识别Scala基础

发布于:2025-03-30 ⋅ 阅读:(30) ⋅ 点赞:(0)

Scala基础

一、Scala基本语法

1.1 Scala的数据类型

数值类型:Byte(8位有符号整数)、Short(16位有符号整数)、Int(32位有符号整数)、Long(64位有符号整数)、Float(32位单精度浮点数)、Double(64位双精度浮点数)。

字符类型:Char,代表单个16位Unicode字符。

字符串:String,用于存储文本。

布尔类型:Boolean,值为 true 或 false。

Unit表示无值,和其他语言中void等同,用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。

Null是所有AnyRef的子类,null是Null的唯一对象

Any是abstract类,它是Scala类继承结构中最底层的。所有运行环境中的Scala类都是直接或间接继承自Any这个类。

Nothing是所有类的子类,是一个类。Nothing没有对象,但是可以用来定义类型。

scala> def foo = throw new RuntimeException

foo: Nothing

AnyRef是所有引用类型的基类。

AnyVal 所有值类型的基类。

 

1.2 变量的定义

强类型语言:Java,需显式声明类型。

弱类型语言:JS、Scala,类型推断自动完成。

 var 和 val : var 定义变量, val 定义常量(类似Java的 final )。

object VariableDefinitionExample extends App {

  // 定义一个变量

  var mutableVariable: Int = 10

  println(s"Initial value of mutableVariable: $mutableVariable")

 

  // 修改变量的值

  mutableVariable = 20

  println(s"Updated value of mutableVariable: $mutableVariable")

 

  // 定义一个常量

  val immutableVariable: String = "Hello Scala"

  println(s"Value of immutableVariable: $immutableVariable")

1.3 操作符

算术操作符:如+、-、*、/、%等,以及&、|、^、>>、<<等。与Java相似。

特殊操作:如 ++ 、 -- Scala中不支持,需用 += 、 -= 替代。

比如num = 1,num ++是错误的,必须写做num += 1。

1.4 字符串的插值

三个字符串插值器: 

s 在字符串前加可以直接使用变量

②f 除了不指定格式其他和s功能一样,使用%可以在变量后指定输出格式

③raw 除了字面值中的字符不做编码外其他功能和S插值器一样 

scala> var name = "jeary"

name: String = jeary

 

scala> var src = s"hello${name}"

src: String = hellojeary

 

scala> val name1 = "jeary"

name1: String = jeary

 

scala> val name2 = "tom"

name2: String = tom

 

scala> println(s"hello,${name1 +","+name2}!")

hello,jeary,tom!

 

1.5 条件表达式

If、If Else(单分支):支持多分支条件表达式,每个表达式都有返回值、If else if else(多分支)

val x = 1

val y = if (x > 0) 1 else -1

println("y=" + y)

 

val z = if (x > 1) 1 else "error"

println("z=" + z)

val m = if (x > 2) 1

println("m=" + m)

val n = if (x > 2) 1 else ()

println("n=" + n)

scala> val y = if(1>1) 1 else "error"

y: Any = error

scala> val y = if(x>1) 1

y: AnyVal = ()

1.6 类型转换

类型转换:如 toInt 、 toDouble 等,支持字符串转数值类型。

val num = "11"

val num_int = num.toInt

println(num_int+22)

1.7循环语句

①for循环

For循环:支持 to 和 until ,用于遍历集合。

scala>for (i <- 1 to 10) println(i)

打印1到10

scala> 1 to 10

res6: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala>for (i <- 1 until 10) println(i)

打印1到9

//包含开头不包含结尾

 

scala> 1 until 10

res0: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

遍历字符串:

相当于java中的fore

scala> val str = "hello"

str: String = hello

scala> for(c <- str) println(c)

h

e

l

l

o

通过下标遍历字符串:

scala> for (i <- 0 until str.length) println(str.charAt(i))

h

e

l

l

o

遍历数组:

scala> val arr = Array(1,2,3,4,5,6)

arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

scala> for(a <- arr) println(a)

1

2

3

4

5

6

通过下标遍历数组:

scala> for(i <- 0 until arr.length) println(arr(i))

1

2

3

4

5

6

双重循环:

输出个位数与十位数不相同的两位数(个位、十位数均从1-3取值)

scala> for(i <- 1 to 3;j <- 1 to 3 if i != j) println(i*10+j)

12

13

21

23

31

32

数组操作:

对数组中的每个数乘以10,生成一个新数组:

scala> val arr = Array(1,2,3,4,5,6)

arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)

for(i<- arr)println(i*10)

for(i<- 0 until arr.length)println(arr(i)*10)

更简单的方法:

scala> for (i <- arr) yield i*10

res4: Array[Int] = Array(10, 20, 30, 40, 50, 60)

for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是Map,被循环的是 List,返回的就是 List,以此类推。

scala> arr.map(_ * 10)

res8: Array[Int] = Array(10, 20, 30, 40, 50, 60)

 

scala> arr.map(x => x *10)

res9: Array[Int] = Array(10, 20, 30, 40, 50, 60)

把数组中的偶数取出来乘以100得到一个新的数组

for(i<- arr if i%2 ==0)println(i*100)

for(i<- 0 until arr.length if arr(i)%2==0)println(arr(i)*100)

更简单的方法:

scala> for (i <- arr if i%2==0) yield i*100

res11: Array[Int] = Array(200, 400, 600)

scala> arr.filter(m => m%2==0).map(n => n*100)

res12: Array[Int] = Array(200, 400, 600)

 

 

②while循环

While和Do-While:与Java语法相似, do-while 至少执行一次。

var n = 10

while(n > 0) { 

println(n)

n -= 1

}

③do while循环

至少被执行一次。

var n =1

do{

  println(n)

  n+=2

}while(n<10)

1.8操作符重载

在scala里面没有运算符,所有的符号其实都是方法。

scala> val a = 1.+(2)

a: Int = 3

相当于是,1这个实例调用+方法,传入了一个参数2

定义一个+方法:

scala> def +(x : Int,y : Int):Int = { x + y }

$plus: (x: Int, y: Int)Int

scala> $plus(10,30)

res8: Int = 40