没有抽象属性的类型注释

时间:2009-11-17 06:56:23

标签: f# properties types annotations

有关如何添加类型注释以解决此错误的任何想法?

我在getFooBar中的Foo.Bar下面出现了一个红色波浪形,并发出以下错误信息。

根据此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型注释来约束对象的类型。这可能允许解析查找。

[<AllowNullLiteralAttribute>]
type Test(foo : Test, bar : int) =

    let getFooBar(test : Test) =
        test.Foo.Bar 

    member this.Foo with get() = foo
    member this.Bar with get() = bar

3 个答案:

答案 0 :(得分:4)

我不明白为什么需要这样做但只是注释Foo的结果似乎有效:

[<AllowNullLiteralAttribute>]
type Test(foo : Test, bar : int) =
    let getFooBar(test : Test) =
        (test.Foo : Test).Bar

    member this.Foo with get() = foo    
    member this.Bar with get() = bar

答案 1 :(得分:2)

您也可以只注释Foo属性的类型:

type Test(foo, bar : int) = 
   let getFooBar(test : Test) = 
       test.Foo.Bar
   member this.Foo with get() : Test = foo
   member this.Bar with get() = bar

答案 2 :(得分:0)

刚试过制作一个匿名函数并且它有效。

let getFooBar(test : Test) =
    test.Foo |> fun (x:Test) -> x.Bar

有更好的方法吗?