php中变量有哪些基本数据类型?,php变量使用之前需要定义变量类型
一、定义变量Scala第一次定义变量时,必须在变量名前加上关键字“var”或“val”。用“var”修饰的变量可以被赋予新值,原始值被丢弃,类似于Java的非final变量。后续的重新赋值就不用写“var”了。用“val”修饰的变量是禁止重新赋值的,类似于Java的final变量,换句话说就是只能读不能写的变量。
变量名可以是字母、数字和下划线的任意组合,但不能以数字开头。Scala推荐的命名方式是“驼峰命名”,即每个单词的首字母大写,变量名和函数名以小写字母开头,类、对象和traits以大写字母开头。比如“val isOne”“class my class”。第一次定义变量时,必须用特定的值对它们进行初始化。不能以下列形式出现:
val x
x=1
以下代码都是合法的变量定义:
标量值x=1
x: Int=1
标量变量y=2
y: Int=2
scala val msg=你好,世界!
msg: String=Hello,world!
当重新分配var类型的变量时,新值必须与旧值的类型相同,否则将出现类型匹配错误:
标量变量x=1
x: Int=1
scala x=10
x: Int=10
scala x=abc
控制台:12:错误:类型不匹配;
找到:字符串( abc )
必需:Int
x=abc
^
val类型的变量被直接禁止重新分配:
标量值x=1
x: Int=1
scala x=10
控制台:12:错误:重新分配给val
x=10
^
如果要给多个变量赋同一个值,不需要逐个定义,在语句中使用逗号分隔的变量名即可。例如:
标量值a,b,c=1
答:Int=1
b: Int=1
c: Int=1
Scala的变量定义是覆盖的,即如果出现同名变量,后面的变量会覆盖前面的变量。例如:
标量值x=1
x: Int=1
标量值x=10
x: Int=10
scala x
res0: Int=10
注意,分配给变量的对象是可变的和不可变的。了解变量本身所指向的对象是否发生了变化,或者变量是否指向了新的对象。即使是val类型的变量也可以被赋予一个可变对象。这个可变对象可以再次修改,例如,向可变映射添加一个新的键值对。其实只是旧对象变了,没有创建新对象。
Scala提倡定义val类型的变量,因为它是函数式编程,函数式编程的一个思想就是传入函数的参数不要改变。所以在Scala中,所有函数的参数都必须是val类型。然而,Scala也允许命令式编程,所以var类型的变量被保留,尽管不建议这样做。例如,对于习惯命令式编程的读者,他们喜欢写“for(I=0;I N;I)”实现一个循环,显然更倾向于使用var类型的变量,因为在这个for循环中,变量I被重新赋值了几次。Scala建议读者学习使用val,学习函数式编程。我也学过C/C,但是现在完全习惯了函数式编程。使用val类型的一个好处是,你不需要计算某个时刻变量的值,因为val类型的变量一旦初始化,在被重新定义之前保持不变。
二、Scala Scala的基本类型是静态语言,编译时会检查每个对象的类型。在编译时可以发现类型不匹配的非法操作。对于动态语言,这种非法操作需要等到运行时才能被发现,这可能会导致严重的错误。所以静态语言在某些方面比Python等动态语言更有优势。对于凿子来说,我们需要这个优势。因为Chisel需要编译成Verilog,所以我们不能生成一个非法的Verilog语句,等到模块运行的时候再去找。
Scala标准库定义了一些基本类型,如下表所示。除了“String”类型属于java.lang包,其余都在Scala的包里。
Scala的基本类型,Byte8位有符号整数,用补码表示,范围是Short16位有符号整数,补码表示,范围是Int32位有符号整数,补码表示,范围是Long64位有符号整数,补码表示,范围是Char16位字符,Unicode编码,是一个字符串Float32位单精度浮点数,范围从0到String,一个Double64位双精度浮点数,符合IEEE 754标准,一个Boolean其实在定义变量的时候就应该注明变量的类型,但是Scala的编译器有自动推断类型的功能,可以根据赋给变量的对象类型自动推断出变量的类型。如果要显式声明变量的类型,或者无法推断,只需在变量名后加一个冒号“:”,然后写出等号和冒号之间的类型名。例如:
scala val x: Int=123
x: Int=123
scala val y: String=123
y: String=123
scala val z: Double=1.2
z: Double=1.2
一、Integer Literal Integer有四种类型,默认推断为Int。如果文字量的末尾有一个L或L,则推断为长类型。此外,在定义变量时,需要显式声明Byte和Short。请注意,分配给的文本值不能超出类型的表示范围。
默认情况下,文字量是十进制的,但如果它们以“0x”或“0X”开头,则被视为十六进制的。十六进制字母不区分大小写。例如:
标量值a=100
答:Int=100
标量值b=0X123Abc
b: Int=1194684
标量值c: Byte=200
控制台:11:错误:类型不匹配;
找到:Int(200)
必需:字节
val c:字节=200
^
标量值d=200L
d:长=200
二。浮点数的文献浮点数的文字都是十进制,默认类型是Double。可以加上一个字母“e”或者“e”,然后加上一个整数作为指数,这样就形成了10的n次方。可以在末尾写一个“f”或“f”,表示浮点类型;也可以写一个“D”或“D”来表示双型。请注意,Double类型的文字不能赋给Float类型的变量。虽然允许将Float扩展为Double类型,但是精度会损失。例如:
标量值a=1.2E3
答:Double=1200.0
标量值b=-3.2f
b:浮动=-3.2
scala val c: Float=-3.2
控制台:11:错误:类型不匹配;
发现:双精度(-3.2)
必需:浮点型
val c: Float=-3.2
^
scala val d: Double=-3.2F
d:Double=-3.2000000000546567
三。字符和字符串的字面量。字符的文字量是用单引号“”括起来的字符,用Unicode编码。还可以用 u code number 来构造一个字符,Unicode代码可以出现在代码的任何地方,甚至出现在名字命名中。此外,还支持转义字符。例如:
scala val a=A
a: Char=A
scala val b=u0041
b: Char=A
scala val c=u0042
c: Char=B
scala val u0041u0042=1
AB: Int=1
scala val d=
d: Char=
字符串是用双引号括起来的字符序列,长度不限,并且允许与转义字符混合使用。此外,还可以在前后用三个双引号包裹,这样双引号也可以出现在字符串中,转义字符不会被解释。例如:
scala val a=\
答:String=
Scala val b= So long u 0041 String !
b: String=这么长的一个字符串 !
.字符串插值Scala包含了一个灵活的机制来支持字符串插值,它允许表达式被嵌入到字符串中并被求值。第一种形式是S内插符,即在字符串的双引号前加一个S,形如S“…$ { expression }…”。s插值器会对每个嵌入的表达式进行求值,对求值结果调用内置的toString方法,用文字量替换表达式。从美元符号到第一个非标识符字符的部分(字母、数字、下划线和操作符的组合称为标识符,用反引号```括起来的字符串)将被视为一个表达式。如果有非标识符字符,它必须放在花括号中,并且左边的花括号应该紧跟在美元符号之后。第二种形式是原始内插符,它类似于S内插符,只是它不识别转义字符。第三种形式是F内插器,它允许您将printf风格的指令添加到嵌入式表达式中。指令放在表达式之后,以百分号开头。指令语法来自java.util.Formatter,例如:
scala val name=ABC
名称:String=ABC
scala println(s$name DEFG )
ABC DEFG公司
scala sSum=${1 10}
res0: String=Sum=11
scala s
res1: String=
scala raw
res2: String=\
scala printf(f${math。Pi}%.5f )
3.14159
三。总结本章介绍Scala定义变量和基本变量类型的方法,重点是学习使用val类型变量。
前一章Scala ——介绍让你的代码运行下一章基本Scala ——函数及其形式