是否可以更改val
字段的值? 如果是这样,那么只能通过构造函数完成,而不能在程序中的任何位置完成? 使用val
意味着内存位置永远不能被修改? 例如: val x = 5
我可以再次使用x
指向具有不同值的不同位置吗?更改val字段的值
0
A
回答
7
总之:不,你不能。 这是不变点,确保您可以总是请确保值保持不变。
这就是为什么有immutables [瓦尔斯]和mutables [瓦尔]它是灵活的,并允许您根据您的需要选择一个选项。选择你的选择并遵守其规则。
3
val是不可变的。 如果你想改变这个值,你应该使用var来代替。
3
如果你想有一个领域是可变的,你应该把它声明为var
,而不是val
。如果由于某种原因,您不能将val
更改为var
,但仍然需要更改其值,则可以使用反射来完成此操作。
class ModifyVal {
val x = 5
}
object ModifyVal {
def main(args: Array[String]): Unit = {
val instance = new ModifyVal()
println(instance.x) // 5
// instance.x = 10 doesn't compile: Reassignment to val
val fieldX = instance.getClass.getDeclaredField("x")
fieldX.setAccessible(true)
fieldX.setInt(instance, 10)
println(instance.x) // 10
}
}
2
作为一般规则(不诉诸与经纱语言的意图扭曲),没有你不能修改val
,也不应该希望。相反,如果您希望继续使用功能性编程风格,请考虑制作一个包含实例的副本,并修改val
字段的值。案例类已经帮助这一点通过提供copy
构造,使这种操作的:
case class Person(name: String, age: Int) {
def birthday = copy(age = age + 1) // returns a new Person with the same name, but one year older
}
2
VAL,粗略地讲,是指不变(最后在Java中)。
时宣布,一个VAL必须被分配到的东西,无论是价值
val name: String // compilation error
val name : String = "Hello"
或没有(尽管没有人做这个)一个VAL分配
val name : String = _
后,就不能被重新分配。
不变性是Scala强烈支持的一个有用的特性。这鼓励编写没有副作用和线程安全的代码。这就是为什么Scala是可伸缩和并发应用程序的理想选择。
斯卡拉的一种特殊的不变性是未来。未来是一个只写一次的容器 - 在未来完成之后,它实际上是不可变的。
相关问题
- 1. 更改字段的值
- 2. 更新其他字段的值更改一个字段的值
- 3. jQuery的VAL()不更新输入字段
- 4. 在oracle中更改另一个字段的值时更改表字段的值
- 5. JButton不更改字段值
- 6. 无法更改字段值
- 7. 更改BSON字段值(C++)
- 8. 更改字段值单击
- 9. Oracle clob字段val
- 10. 更新一个字段声明为VAL
- 11. 当更改选择字段的值时更新文本字段
- 12. 更新RowEditing字段时更改其值
- 13. jqGrid更改beforeShowForm上的字段的值
- 14. PropertyInfo.SetValue(object obj,object val,object [] index)属性值在更改“object val”时不会改变
- 15. 更改输入字段的值,而写
- 16. GroceryCrud + CodeIgniter更改字段内的值
- 17. 更改数据行的字段值
- 18. 更改Drupal表单中字段的值
- 19. 更改隐藏字段的值
- 20. 更改日期字段的值
- 21. javascript getElementsByClassName更改文本字段的值
- 22. jquery - 更改输入字段的值
- 23. Iinherited字段的值不会更改
- 24. Javascript - 更改文本字段的值
- 25. 更改克隆的隐藏字段值
- 26. 更改输入字段的值 - 反应
- 27. 更改与saveMany多行的字段值()
- 28. IIF更改表中字段的值
- 29. Value Class w /`val`字段
- 30. 更改颜色.val jquery