我在F#中有一些代码正常工作,但是现在任何函数都返回带有@ +行号的let绑定的名称?所以在我做这样的事情之前:
let sqlData = GetSummary 2011
我会得到数据。现在我得到sqlData @ 160作为返回类型,它打破了期望特定类型的其他函数。任何关于为什么突然开始发生的帮助将不胜感激。
更新: 所以我将GetSummary代码改为此只是为了看看会发生什么:
let GetSummary fiscalYear =
let g = 22
g
没有任何改变。我得到了完全相同的结果,即使我有断点也不会破坏功能。它也不会进入GetSummary。为什么它会忽略某些功能而不是其他功能呢?
答案 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
因为我没有传递这个名字,所以它认为我正在调整这个函数,因此这是奇怪的行为。
感谢您的投入!!!