当前位置:  开发笔记 > 编程语言 > 正文

如何让两种方法相互呼叫?

如何解决《如何让两种方法相互呼叫?》经验,为你挑选了3个好方法。

关于如何让两个方法相互呼叫(即有A()呼叫B()B()呼叫A()),我有点困惑.似乎F#只在代码中遇到它后"看到"该方法,所以如果它没有,它只是说值或构造函数尚未定义.

我错过了一些非常基本的东西吗?



1> Brian..:

'让rec ......和......'是你寻求的语法.

let rec F() = 
    G()
and G() =
    F()

另见F#Co-Recursion中的冒险.



2> Kurt Schelft..:

既然问题是关于方法的,而Brian的答案是关于函数的,那么指出你可以对类型使用类似的语法是有用的:

type A() =
    let b = new B()
    member x.MethodA() = b.MethodB()
and B() =
    member x.MethodB() = ()

另请注意,默认情况下成员是'let rec'(实际上我不认为它们不能递归).



3> Shaun Luttin..:

F#4.1引入了相互递归的模块和命名空间.

这些是and关键字的替代品.

module rec PingPong = // <------ rec keyword here.

    let pong() = 
        printfn "pong"
        ping() 

    let ping () = 
        printfn "ping"
        pong()

rec关键字定义了"允许所有包含的代码相互递归"的模块和命名空间.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有