不完全的。您实际上并没有在这里进行任何铸造。让我们看看你的代码在做什么:
type Dabg = { trial : int list }
这声明了一个新类型,特别是一个记录类型,它包含一个名为trial
type的名称-值对int list
。
let talc = { trial = [1; 2] }
这将创建记录类型的实例Dagb
,将其值设置为trial
列表[1; 2]
,并将实例绑定到名称talc
。请注意,talc
实例、它的所有名称-值对和所有列表都是不可变的——您不能talc
引用不同的对象、更改哪些列表trial
引用或更改该列表的内容。
let Update(i) : Dabg =
let newlist = List.append [(i)] talc.trial
{ trial = newlist }
这定义了一个新函数,命名为Update
接受单个参数,其类型由类型推断(to be int
)确定。它将返回一个类型的值Dabg
。调用时,它将调用List.append
,它创建一个新列表,其中包含第一个参数(just i
)的值,后跟第二个参数(列表talc.trial
)的值。最后一行是隐式返回值,该函数返回一个新的类型实例,Dabg
其中trial
设置为新列表。
Update 3
这一行调用了参数为 3 的 Update。跟踪它的执行表明它创建了一个newlist
value [3; 1; 2]
,然后返回一个新的 type 实例,Dabg
其中 trial 等于 list [3; 1; 2]
。这个返回值没有被使用,也没有被talc
改变,它仍然指向{ trial = [1; 2] }
.
也许您打算更新 的值trial
?在这种情况下,您可以捕获 的返回值Update
并在以后使用它。喜欢:
let newTalc = Update 3
doStuff newTalc