2011-10-19 8 views
0

F#でコードが正常に動作していましたが、今では@ +行番号のletバインディングの名前が返されます。だから私はこのような何かをした前:F#が突然関数の値を@ +行番号として返すのはなぜですか?

let sqlData = GetSummary 2011 

私はデータを取得します。戻り値の型としてsqlData @ 160を取得しました。これは特定の型を必要とする他の関数を破ります。なぜこれが突然起こったのかについての助けに感謝します。

UPDATE:

let GetSummary fiscalYear = 
    let g = 22 
    g 

、何も変わっていない: だから、僕は何が起こるか見るためにこれにGetSummaryコードを変更しました。私はまったく同じ結果を得て、ブレークポイントを持っていても機能が損なわれません。また、GetSummaryに入ることもありません。なぜそれはいくつかの機能を無視し、他の機能を無視しないだろうか?

+2

GetSummaryのコードを投稿できますか? –

+1

私の推測では、それはあなたが期待しているものとは異なるタイプを推論し始めたことであり、それらのタイプはあなたのプログラムを通して驚くべき方法で伝播しています。 – Gabe

+0

Get Summaryは、SQL Serverからのデータとカスタムタイプを返す他のいくつかの関数を呼び出します。他の基本機能も適切に戻っていなくても、他の基本機能は戻ります。なぜ私は分からない。 Gabeは、型を間違って推測しているわけではありません。戻り型を存在しないsqlData @ 160に変更しています。 奇妙なことは、GetSummary関数をステップ実行しないことです。それはコードのブックマークを置いているようです。遅い実行は悪くなった? – Erick

答えて

1

さて、今私は本当に愚かな感じ。私は戻って、私は名前を渡していなかったので、私は

GetSummary name fiscalYear 

にGetSummaryの定義を変更していたことに気づいた、それは私が奇妙な振る舞い、したがって、機能をカリー化されたことを考えました。

あなたのご意見ありがとうございます!

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! 
[email protected] 
+0

Tomas、可能ですが、上記の編集が表示されたら、機能を変更して同じ動作をしました。コンパイラは再コンパイルされませんか?私は本当に困っている! – Erick

関連する問題