2010-03-07 158 views
4

我是通過PDC 2008 F#視頻的工作,似乎遇到了問題F#靜態成員

type StockAnalyzer (lprices, days) = 
let prices = 
    lprices 
    |> Seq.map snd 
    |> Seq.take days 
static member GetAnalyzers(tickers, days) = 
    tickers 
    |> Seq.map loadPrices 
    |> Seq.map (fun prices -> new StockAnalyzer(prices, days)) 

member s.Return = 
    let lastPrice = prices |> Seq.nth 0 
    let startPrice = prices |> Seq.nth (days - 1) 
    lastPrice/startPrice - 1. 

我在靜態收到一個錯誤。

GetStockPrices.fs(31,6):錯誤FS0010:綁定中意外的關鍵字'static'。在此點或其他標記之前或之前預期的不完整結構化構造。
是否有人知道他們是否改變了語法或可以發現我做錯了什麼

回答

13

F#使用顯着的空白。在「let prices =」前添加一個空格。編譯器試圖找出爲什麼你有一個「價格」的靜態成員,因爲只有較少縮進的前一行是「let prices =」。

爲清楚起見,您可能需要使用更多縮進。

type StockAnalyzer (lprices, days) = 
    let prices = 
     lprices 
     |> Seq.map snd 
     |> Seq.take days 

    static member GetAnalyzers(tickers, days) = 
     tickers 
     |> Seq.map loadPrices 
     |> Seq.map (fun prices -> new StockAnalyzer(prices, days)) 

    member s.Return = 
     let lastPrice = prices |> Seq.nth 0 
     let startPrice = prices |> Seq.nth (days - 1) 
     lastPrice/startPrice - 1. 
6

縮進的字之前static是混淆編譯器和它試圖把它解釋爲let表達的一部分。 let表達式應該縮進,並且成員定義應該與它一致。