F# WebSharper:具有相等性检查的不透明类型`===`
我需要一个在F#中完全不透明的数据类型,并且根据JSF# WebSharper:具有相等性检查的不透明类型`===`,f#,websharper,F#,Websharper,我需要一个在F#中完全不透明的数据类型,并且根据JS==定义相等。WebSharper手册说我应该覆盖等于,但我不能让它工作 let x : OpaqueType = X<_> let f (y : OpaqueType) = if x = y then // this line should be translated to `if (x === y)` 42 else 10 设x:OpaqueType=x 设f(y:Opaque
==
定义相等。WebSharper手册说我应该覆盖等于
,但我不能让它工作
let x : OpaqueType = X<_>
let f (y : OpaqueType) =
if x = y then // this line should be translated to `if (x === y)`
42
else
10
设x:OpaqueType=x
设f(y:OpaqueType)=
如果x=y,那么//这一行应该翻译为“如果(x==y)”`
42
其他的
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)
模块测试=
打开IntelliFactory.WebSharper
[]
设计数器=ref 0
[]
[]
类型T()=
让我们散列=
递增计数器
计数器值
[]
重写这个。GetHashCode()=
搞砸
[]
覆盖此。等于(其他:obj)=
其他===。这
[]
让Main()=
设a=T()
设b=T()
Log(a,b,a=b,a=a,散列a,散列b)
NET库希望相等和哈希保持一致(例如,在字典中使用)。它们还通过虚拟方法与类型关联,因此内联将无法正常工作。上面的代码为您提供了一个具有类似于等式语义的引用的类型 哇,我不知道有一个
(==)
接线员。我觉得WebSharper需要更多的文档…