gpt4 book ai didi

c# - F#:实现 "try cast"函数,参数化 "subtype of"约束不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:36:11 24 4
gpt4 key购买 nike

<分区>

我正在尝试在 F# 中实现“try cast”运算符。约束的子类型不起作用。

例如,我想在 C# 中做什么:

static A TryCast<TSuper, TSub, A>(
Func<TSub, A> f,
Func<TSuper, A> g,
TSuper x)
where TSub : TSuper
=>
x is TSub sub ? f(sub) : g(x);

F# 中的等价物应该是:

let tryCast<'super, 'sub when 'sub :> 'super>
(f : 'sub -> 'a) (g: 'super -> 'a) (x : 'super) : 'a =
match x with
| :? 'sub as sub -> f sub
| x -> g x

或者

... 
if x :? 'sub then f (x :?> 'sub) else g x

但是,它给了我一个错误“‘sub has been constrained to always be ‘super’ in the “when” clause.这似乎表明 F# 不支持这一点。不过,我觉得我可以用 C# 来做这件事很奇怪。

所以问题是:这可以在 F# 中完成吗?

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