在F#中相互引用的类

时间:2014-08-10 18:11:10

标签: f#

我有两个类定义如下:

type foo () =
    let getBar() = 
        new bar()

type bar () =
    let getFoo() = 
        new foo()

编译器说

The type 'bar' is not defined

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

这是and关键字的使用位置(必须明显在同一个文件中):

type Foo () =
   let getBar () =
      Bar ()

and Bar () =
   let getFoo () =
      Foo ()

备注

如果你有相互递归函数(甚至是值),也可以使用它 - 但是你必须在第一个绑定中添加rec关键字:

let rec f x = if x > 0 then g x else 0
and g x = f (x-1)