簡體   English   中英

F#功能清單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM