gpt4 book ai didi

f# - fsharp 中参数和接口(interface)继承的一个陷阱

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

有没有什么真正的原因导致 KO 不起作用?

  type IBase = 
abstract member test : (unit * unit) -> unit

type OK() =
interface IBase with

member x.test ((titi,tata)) = () //OK

type KO() =
interface IBase with

member x.test (titi,tata) = () //fail : This override takes a different number of arguments to the corresponding abstract member

最佳答案

因为括号在 F# 中表示某些东西(它表示一个元组),所以它们不一样。

如给定的,test方法被定义为采用两个 unit 的元组的方法值作为参数。如果使用Reflection获取MethodInfo,方法定义为:

Void test(System.Tuple`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit])

匹配 OK方法,但不是 KO方法。

如果将接口(interface)重新定义为
type IBase = 
abstract member test : unit * unit -> unit

然后 OK不编译,但 KO做。

此替代版本产生 test接受两个参数的方法:
Void test(Microsoft.FSharp.Core.Unit, Microsoft.FSharp.Core.Unit)

关于f# - fsharp 中参数和接口(interface)继承的一个陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812801/

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