以下内容之间的“真正”区别是什么?
val b = ( x:Double) => x * 3
var b = ( x:Double) => x * 3
从技术上讲,一旦为val
赋值,就不应该更改它。但是,作为第一条语句的一部分,可以通过传递不同的x
值将b
的值更改为不同的值。
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
的价值正在发生变化吗?
发布于 2018-01-15 06:53:50
b
是一个接受Double
并返回1的函数。
函数本身不能改变,它返回的值也不能改变(函数是第一类的值)。
如果您尝试这样做:
b = (x : Double) => x * 6
你会得到:
错误:重新分配到val
但也可以更改var
one:
scala> b = (x : Double) => x * 7
b: Double => Double = $$Lambda$1308/1272194712@9e46050
但请注意,当您更改var
类型时,应该保留它的类型:接受Double
并返回Double
的函数,与更改任何其他类型(如Integer
或Boolean
)时相同。
发布于 2018-01-15 06:54:07
在您发布的示例中,b
是一个函数。您随后会将不同的值传递给该函数。b
的值不会因此而改变。
语法如下:
发布于 2018-01-15 07:33:25
在scala中,'val‘是一个不可变的变量,它具有只读属性,这就是为什么它只打印值'9’,但在第二个语句中,'b‘被声明为'var’,这允许我们读写这个值,所以它打印值'12‘。
Scala允许你决定一个变量是不可变的还是可变的。不可变的是只读的,而可变的是读写的。不可变变量是用关键字“val”声明的。
scala> val age:Int=22
在这里,age在声明过程中被初始化为一个值。由于它已声明为val,因此不能将age重新分配给新值。任何这样做的尝试都将导致al重新分配到val错误。
可变变量用关键字“var”删除。与val不同,“var”可以重新分配给不同的值或指向不同的对象。但它们必须在声明时初始化。
scala> var age:Int=22
age: Int=22
scala> age=35
age: Int=35
https://stackoverflow.com/questions/48258142
复制相似问题