gpt4 book ai didi

F#:为什么两个持有等效值类型的 ref 或 boxed 值等同于同一个单元格或 obj?

转载 作者:行者123 更新时间:2023-12-05 01:34:31 27 4
gpt4 key购买 nike

let i = ref 123
let j = ref 123
i = j // true

类似地:

let i = box 123
let j = box 123
i = j // true

据推测,i 和 j 实际上并没有指向内存中的同一个位置...??

在第二种情况下,我通过以下方式解决了这种(奇怪的?)行为:

obj.ReferenceEquals (i, j)    // false

第一种情况的正确相等性测试是什么?

编辑:

我看到在第一种情况下调用 obj.ReferenceEquals 也有效。

有人可以向我解释为什么我必须调用这个函数吗?为什么我不能只使用 = 运算符?

最佳答案

(=) 运算符调用 GenericEqualityObj .它首先检查 args 的类型(对于数组,可分配给 IStructuralEquatable,以及一些其他特殊情况),最后一个情况调用 obj.EqualsEqualsValueType(int 派生)覆盖以进行位比较。这解释了为什么 (box 123) = (box 123)true

关于F#:为什么两个持有等效值类型的 ref 或 boxed 值等同于同一个单元格或 obj?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com