不變性
Q# 中的所有型別是「實值型別」。 Q# 沒有參考或指標的概念。 相反地,它可讓您透過 set
語句,將新值重新指派給先前宣告的變數。 例如,在重新指派類型 Int
變數或 類型 Int[]
變數之間的行為沒有區別。 請考慮下列語句序列:
mutable arr1 = new Int[3];
let arr2 = arr1;
set arr1 w/= 0 <- 3;
第一個語句會具現化整數的新數位, [0,0,0]
並將它指派給 arr1
。
下一個語句會將該值指派給名稱為 arr2
的變數。 最後一個語句會根據 arr1
相同值建立新的數位實例,但索引0的值設定為3除外。 然後,新建立的陣列會指派至變數 arr1
。 最後一行會使用評估和重新指派陳述式的縮寫語法,而且可能會以同樣的方式寫成 set arr1 = arr1 w/ 0 <- 1;
。
執行三個 語句之後, arr1
將會包含 值 [3,0,0]
,同時 arr2
維持不變,並包含 值 [0,0,0]
。
因此,Q# 會明確區分控制代碼的可變動性和型別的行為。 內的 Q# 可變動性是套用至 符號 而非類型或值的概念;它適用於可讓您存取值而非值本身的句柄。 其在型別系統中「不會」以隱含或明確的方式表示。
當然,這只是正式定義行為的描述;其實,實際實作會使用參考計數配置,盡可能避免複製記憶體。 只要只有一個目前有效的句柄可以存取特定值,修改就特別完成。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應