2014-02-05 24 views
1

假如我有一類定義如下:F#:創建從現有的新紀錄,與列表

type State = { intList : int list } 

和值如下:

let a = { intList = [1; 2; 3; 4] } 

現在假設我想新值ba的值加上5加到最後。我無法弄清楚如何使用with語法來做到這一點。例如,我也無法弄清楚如何獲得具有更少元素的新狀態。

回答

4

with語法(複製和更新表達式)不允許基於另一個記錄的修改後的屬性創建記錄,只複製某些屬性(完好)並替換其他記錄。您可以使用正常的記錄構造函數:

let a = { intList = [1; 2; 3; 4] } 
let b = { intList = a.intList @ [1; 2; 3; 4; 5] } 
let c = { intList = List.tail a.intList } 
2

正如Daniel所說,沒有特定的語法來從要複製和更新的記錄讀取屬性。但你仍然可以使用正常的點符號訪問它:

let a = { intList = [1; 2; 3; 4] } 

let b = { a with intList = a.intList @ [5] } 

當然,在這種情況下,with是相當無用的,因爲你要更新所有的字段,所以你可能也僅僅使用新記錄語法(如Daniel所示)。但是,如果記錄也有從ab要保留的字段,這就是我將如何做到的。