平方和我要定義sumOfSquares
不使用參數顯式,而不是依賴於功能性成分定義沒有規定參數
這裏的下面
let sumOfSquares = Seq.map (fun n -> n * n) >> Seq.sum
但是我的代碼,我得到了以下錯誤
stdin(80,5):錯誤FS0030:值限制。值「sumOfSquares」 已經被推斷爲有泛型類型
val sumOfSquares : ('_a -> int) when '_a :> seq<int>
要麼使參數「sumOfSquares」明確,或者,如果你不打算對 它是通用的,添加類型註釋。
之一來解決它的方法是使用參數
let sumOfSquares nums = nums |> Seq.map (fun n -> n * n) |> Seq.sum
,這會工作。不過,我想看看我是否可以使用單獨組成
更新
定義平方和這裏有一個nice article描述我遇到的問題:值的限制。
謝謝。糾正我,如果我錯了,F#假設我正在做一個函數接受泛型類型參數,但通過類型推斷,它發現我想定義'seq - > int',因此它變得「困惑」。是這樣嗎? –
OnesimusUnbound
@OnesimusUnbound正如你從消息中看到的那樣,F#推斷你想要一個函數接受*從類型層次結構中的'IEnumerable'降序並返回'int'的任何集合。如果你希望參數嚴格爲'seq ',你必須對它進行註釋:)不幸的是,子類型(以及重載)對於類型推斷可能會很棘手。 –