不變性
Int
類型的變數或類型變數 Int[]
的重新指派行為沒有區別。 請考慮下列語句序列:
mutable arr1 = new Int[3];
let arr2 = arr1;
arr1 w/= 0 <- 3;
第一個語句會具現化整數的新數位 [0,0,0]
,並將它指派給 arr1
。
下一個語句會將該值指派給名稱為 arr2
的變數。 最後一個語句會根據具有相同值的 arr1
,建立新的數位列實例,但索引0的值設為3除外。 然後,新建立的陣列會指派給變數 arr1
。 最後一行會使用 評估與重新指派語句的縮寫語法,,而且相當於已撰寫為 arr1 = arr1 w/ 0 <- 1;
。
執行三個語句之後,arr1
會包含值 [3,0,0]
,而 arr2
保持不變,並包含值 [0,0,0]
。
因此,Q# 清楚區分句柄的可變性和型別的行為。 Q# 內的可變性是適用於 符號 而非類型或值的概念;它適用於可讓您存取值而非值本身的句柄。 它 隱含或明確表示於類型系統中。
當然,這隻是正式定義行為的描述:在幕後,實際實作會使用參考計數配置,以避免儘可能複製記憶體。 只要只有一個目前有效的句柄可存取特定值,修改才會特別完成。