Scala 常量值
Scala常量值
整数常量
整数常量可以用十进制,十六进制或八进制表示。
详细总结在下表中。
类型 | 格式 | 例子 |
---|---|---|
Decimal | 0或非零数字后跟零或多个数字(0-9) | 0, 1, 321 |
Hexadecimal | 0x后跟一个或多个十六进制数字(0-9,A-F,a-f) | 0xFF, 0x1a3b |
Octal | 0后跟一个或多个八进制数字(0-7)a | 013, 077 |
截至Scala 2.10,一个八进制常量已被弃用。
您可以通过在常量前添加一个 -
号来表示负数。
对于长文本,需要在文本末尾附加L
或l
字符,除非将值分配给声明为Long的变量。
否则,推断Int。
整数字符串的有效值受要为其分配值的变量的类型的限制。
下表定义了包含的限制。
目标类型 | 最低(含) | 最大(包括) |
---|---|---|
Long | -263 | 263 |
Int | -231 | 231 - 1 |
Short | -215 | 215 |
Char | 0 | 216 |
Byte | -27 | 27 - 1 |
如果指定的整数常量数超出这些范围,则会发生编译时错误。
浮点常量
浮点常量是带有可选减号,零个或多个数字,后跟句点.
,后跟一个或多个数字的表达式。
对于 Float
常量,在文字末尾附加F
或f
字符。否则,假定为Double。
我们可以选择为D加上D
或 d
。
浮点常量可以用或不用指数表示。
指数部分的格式为e或E,后跟可选的+或 - ,后跟一个或多个数字。
这里有一些浮点常量的例子。 Double被推断除非声明的变量是Float或使用f或F后缀:
.14 3.14 3.14f 3.14F 3.14d 3.14D 3e5 3E5 3.14e+5 3.14e-5 3.14e-5 3.14e-5f 3.14e-5F 3.14e-5d 3.14e-5D
布尔常量
布尔常量是true
和false
。
它们被分配到的变量的类型将被推断为布尔值:
object Main { def main(args: Array[String]) { val b1 = true val b2 = false println(b1); println(b2); } }
字符常量
字符常量是可打印的Unicode字符或转义序列,写在单引号之间。Unicode值介于0和255之间的字符可以由八进制转义表示,即反斜杠(\)后跟最多三个八进制字符的序列。
这里有些例子:
"A" "\u0041" // "A" in Unicode "\n" "\012" // "\n" in octal "\t"
有效的转义序列如下表所示。
序列 | 含义 |
---|---|
\b | 退格(BS) |
\t | 水平制表(HT) |
\n | 换行(LT) |
\f | 换页(FF) |
\r | 回车(CR)... |
\" | 双引号(“) |
\" | 单引号(“) |
\\ | 反斜杠(\) |
字符串常量
字符串常量是用双引号或三重双引号括起来的字符序列,即“”“...”“”。
对于双引号中的字符串字符,允许的字符与字符常量相同。
要在字符串中包含双引号“
字符,必须使用\
字符“转义"。
这里有些例子:
"This is a\ntest" "He said, \"SQL is for database!\"" "First\tSecond"
由双引号的三元组界定的字符串常量称为多行字符串常量。
这些字符串可以覆盖几行。换行符将是字符串的一部分。它们可以包括任何字符,包括一个或两个双引号在一起,但不能三个在一起。
它们对于不具有有效Unicode或转义序列的\字符的字符串非常有用。
这里有三个示例字符串:
"""This is a \ntest""" """He said, "SQL is for database!" """ """First line\n Second line\t Fourth line"""
在代码中使用多行字符串时,要使用String.stripMargin缩进子字符串以进行正确的代码格式化。
它删除子字符串中的所有空格,直到并包括垂直条|
的第一次出现。
要添加空格缩进,请将空格放在|
后面。
考虑这个例子:
object Main { def main(args: Array[String]) { println(hello("This is a test") ); } def hello(name: String) = s"""Welcome! Hello, $name! * (Star!!) |Hi. | whitespace.""" .stripMargin }
要使用不同于|
的前导字符,请使用带有Char(字符)参数的stripMargin的重载版本。
如果整个字符串都有要删除的前缀或后缀,则有相应的前缀和stripSuffix方法。
object Main { def main(args: Array[String]) { println(goodbye("www.w3cschool.cn")); } def goodbye(name: String) = s"""xxxGoodbye, ${name}yyy xxxCome again!yyy""" .stripPrefix("xxx").stripSuffix("yyy") }
符号常量
Scala有符号类型,它们是内部连接的字符串,意味着具有相同“名称”的两个符号实际上是指内存中的同一个对象。
符号常量是单引号'
,后跟一个或多个数字,字母或下划线(“_”),但第一个字符不能是数字。
函数常量
(i:Int,s:String)=>
s + i 是Function2类型的函数文本[Int,String,String](返回String)。
你甚至可以使用常量语法作为类型声明。
以下声明是等效的:
val f1: (Int,String) => String = (i, s) => s+i val f2: Function2[Int,String,String] = (i, s) => s+i
元组常量
Scala库包括用于将N个项分组的TupleN类(例如,Tuple2),以及括号内的项的逗号分隔列表的文字语法。
对于1到22之间的N,有单独的TupleN类。
例如,val tup =(“Hi”,2014)定义了一个Tuple2实例,其中第一个元素推断String,第二个元素Int推断。
Tuple实例是不可变的,第一类值,因此您可以将它们分配给变量,将它们作为值传递,并从方法中返回。
我们还可以使用常量语法为Tuple类型声明:
val t1: (Int,String) = (1, "two") val t2: Tuple2[Int,String] = (1, "two")
以下示例演示使用元组:
object Main { def main(args: Array[String]) { val t = ("Hello", 1, 2.3) println( "Print the whole tuple: " + t ) println( "Print the first item: " + t._1 ) println( "Print the second item: " + t._2 ) println( "Print the third item: " + t._3 ) val (t1, t2, t3) = ("World", "!", 0x22) println( t1 + ", " + t2 + ", " + t3 ) val (t4, t5, t6) = Tuple3("World", "!", 0x22) println( t4 + ", " + t5 + ", " + t6 ) } }
表达式t._n从元组t中检索第n个项,从一个开始,不是零,遵循历史约定。
有几种方法来定义两元素元组,有时称为一对。
我们可以在两个值之间使用“箭头运算符”,以及在元组相关类上使用特殊的工厂方法:
(1, "one") 1 -> "one" Tuple2(1, "one")
更多建议: