是否可以更改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