什么是"真实"以下区别?
val b = ( x:Double) => x * 3
var b = ( x:Double) => x * 3
从技术上讲,一旦将值分配给val
,就不应该更改它。但是,作为第一个语句的一部分,b
的值可以通过传递x
的不同值来更改为不同的值。
scala> val b = ( x:Double) => x * 3
b: Double => Double = $$Lambda$1109/411756754@7a522157
scala> b(3)
res1: Double = 9.0
scala> b(4)
res2: Double = 12.0
这里到底发生了什么?是不是b
的价值在这里发生了变化?
答案 0 :(得分:2)
b
是一个函数,它接受Double
并返回一个。
函数本身无法更改,而不是它返回的值(函数是一等值)。
如果您尝试这样做:
b = (x : Double) => x * 6
你会得到:
错误:重新分配给val
但是可以更改var
一个:
scala> b = (x : Double) => x * 7
b: Double => Double = $$Lambda$1308/1272194712@9e46050
但请注意,当您更改var
时,应该保留其类型:一个带Double
并返回Double
的函数,如果要更改任何一个,则相同其他类型,如Integer
或Boolean
。
答案 1 :(得分:0)
答案 2 :(得分:0)
在scala中,'val'是一个不可变的,它具有只读的属性,这就是为什么它只打印值'9'但在第二个语句中现在'b'被声明为'var',这使我们能够读取和放大;写入值,使其打印值'12'。
Scala允许用户决定变量是不可变还是可变。不可变是只读,其中可变是读写。使用关键字“val”声明不可变变量。
scala> val age:Int=22
此处的年龄已在声明期间初始化为一个值。由于它已被声明为val,因此不能将age重新分配给新值。任何尝试都会导致重新分配给val错误。
可变变量与关键字“var”相关联。与val不同,“var”可以重新分配给不同的值或指向不同的对象。但是他们必须在申报时初始化。
scala> var age:Int=22
age: Int=22
scala> age=35
age: Int=35