假如我有一類定義如下:F#:創建從現有的新紀錄,與列表
type State = { intList : int list }
和值如下:
let a = { intList = [1; 2; 3; 4] }
現在假設我想新值b
與a
的值加上5加到最後。我無法弄清楚如何使用with
語法來做到這一點。例如,我也無法弄清楚如何獲得具有更少元素的新狀態。
假如我有一類定義如下:F#:創建從現有的新紀錄,與列表
type State = { intList : int list }
和值如下:
let a = { intList = [1; 2; 3; 4] }
現在假設我想新值b
與a
的值加上5加到最後。我無法弄清楚如何使用with
語法來做到這一點。例如,我也無法弄清楚如何獲得具有更少元素的新狀態。
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 }
正如Daniel所說,沒有特定的語法來從要複製和更新的記錄讀取屬性。但你仍然可以使用正常的點符號訪問它:
let a = { intList = [1; 2; 3; 4] }
let b = { a with intList = a.intList @ [5] }
當然,在這種情況下,with
是相當無用的,因爲你要更新所有的字段,所以你可能也僅僅使用新記錄語法(如Daniel所示)。但是,如果記錄也有從a
到b
要保留的字段,這就是我將如何做到的。