为什么F#突然从函数中返回值@ +行号?

时间:2011-10-19 21:49:06

标签: .net f#

我在F#中有一些代码正常工作,但是现在任何函数都返回带有@ +行号的let绑定的名称?所以在我做这样的事情之前:

let sqlData = GetSummary 2011

我会得到数据。现在我得到sqlData @ 160作为返回类型,它打破了期望特定类型的其他函数。任何关于为什么突然开始发生的帮助将不胜感激。

更新: 所以我将GetSummary代码改为此只是为了看看会发生什么:

 let GetSummary fiscalYear =
    let g = 22
    g

没有任何改变。我得到了完全相同的结果,即使我有断点也不会破坏功能。它也不会进入GetSummary。为什么它会忽略某些功能而不是其他功能呢?

2 个答案:

答案 0 :(得分:2)

我的猜测是你在GetSummary函数中改变了一些东西,所以它实际上返回一个函数而不是返回数据(当你给它一个参数时)。例如,此代码段的行为有点类似 - 它返回一些内部事物,但它不会进入bar函数内部:

> let bar n = printfn "inside bar"; n + 1;;
val bar : int -> int

> let foo n = bar;; // This takes 'n' and returns a function..
val foo : 'a -> (int -> int)

> printfn "%O" (foo 10);; // Here, we call 'foo', but the result is a function!
FSI_0016+it@15-3

答案 1 :(得分:1)

好的,现在我觉得自己真的很蠢。我回过头来意识到我已经将GetSummary的定义改为

GetSummary name fiscalYear

因为我没有传递这个名字,所以它认为我正在调整这个函数,因此这是奇怪的行为。

感谢您的投入!!!