[英]F# List of functions
我正在嘗試提供功能列表,但似乎空手而歸。 基本代碼是這樣的:
let doSomething var =
var
let doSomething2 var =
var
let listOfStuff = [doSomething; doSomething2]
我收到以下異常:
錯誤2值限制。 值'listOfStuff'已推斷為具有通用類型val隊列:('_a->'_a)list要么將'queue'定義為簡單的數據項,要么使其具有顯式參數的函數,或者如果您不打算使用如果是通用的,則添加類型注釋。 C:\\ fsharp \\ SentimentFramework \\ TradeSignalProcessor \\ Program.fs 16 9 TradeSignalProcessor
我嘗試添加[<GeneralizableValue>]
屬性,但是沒有用...
您想要由功能組成的列表嗎? 我認為它會像這樣:
let f x = x + 1
let g x = x + 1
let listOfFunc = [f; g]
如果需要指定參數,請記住使用類型符號:
let f (x:string) = x + "1"
正如其他人指出的那樣,為函數或列表提供顯式類型將解決您的問題。 發生這種情況的原因是函數可以具有通用類型,但(通常來說)值不能具有通用類型。 編譯器推斷出,對於任何類型的'a
,您的兩個函數都具有類型'a -> 'a
'a
。 這意味着您的列表將具有('a -> 'a) list
類型,這是一個通用類型,並且對於值無效。 指定一個顯式類型,如let listOfStuff : (int -> int) list = ...
將解決歧義。
話雖如此,請注意,我無法在最新版本的編譯器(F#2.0.0.0)中重現此確切問題。 似乎列表表達式可以被概括(大概是因為它們沒有副作用)。 但是,當我改用數組表達式時,會看到類似的錯誤。
您遇到了“價值限制”。 您不允許定義諸如listOfStuff
-array之類的通用“值”。
關於此主題, 以前有一些問題可能會很有用,Microsoft在“自動概括”主題下對此進行了介紹。
編輯 :德米特里·洛莫夫(Dmitry Lomov)在這里寫了一篇很棒的文章: “ F#值限制的要點” 。
列表都應具有相同的類型。 嘗試為此使用元組。
...並嘗試按照錯誤提示進行操作。 至少給您的輸入一個類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.