gpt4 book ai didi

f# - WebSharper:不透明类型,具有 `===` 的相等性检查

转载 作者:行者123 更新时间:2023-12-04 22:45:34 28 4
gpt4 key购买 nike

我需要一个在 F# 中完全不透明的数据类型,并根据 JS 定义相等性 === . WebSharper 手册说我应该覆盖 Equals但我无法让它发挥作用。

let x : OpaqueType = X<_>

let f (y : OpaqueType) =
if x = y then // this line should be translated to `if (x === y)`
42
else
10

那么,OpaqueType 的正确定义是什么? ?

当然,我可以用obj并添加一个将执行 x === y 的内联函数但我想要更棒的东西。

最佳答案

我会选择这样的东西:

module Test =
open IntelliFactory.WebSharper

[<JavaScript>]
let Counter = ref 0

[<Sealed>]
[<JavaScript>]
type T() =

let hash =
incr Counter
Counter.Value

[<JavaScript>]
override this.GetHashCode() =
hash

[<JavaScript>]
override this.Equals(other: obj) =
other ===. this


[<JavaScript>]
let Main () =
let a = T()
let b = T()
JavaScript.Log(a, b, a = b, a = a, hash a, hash b)

.NET 库期望等式和散列法保持一致(例如,用于字典)。它们还通过虚方法与类型相关联,因此内联将无法正常工作。上面的代码为您提供了一个具有类似引用的相等语义的类型。

关于f# - WebSharper:不透明类型,具有 `===` 的相等性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776430/

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