2010-03-07 4 views
4

je travaillais les vidéos PDC 2008 F # et semblent courir un problèmeF # membre statique

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. 

Je reçois une erreur à l'électricité statique.

GetStockPrices.fs (31,6): erreur FS0010: mot clé inattendu 'static' dans la liaison. Construction structurelle incomplète attendue à ou avant ce point ou un autre jeton.
Est-ce que quelqu'un sait si elles ont changé la syntaxe ou peuvent repérer ce que je fais mal

Répondre

13

F # utilise un espace blanc significatif. Ajouter un espace devant "let prices =". Le compilateur essaie de comprendre pourquoi vous avez un membre statique de "prix", parce que la seule ligne précédente avec moins d'indentation est "let prices =".

Vous pouvez utiliser plus d'indentation, juste pour plus de clarté.

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

L'indentation avant le mot static confond le compilateur et il essaie de l'interpréter dans le cadre de l'expression let. L'expression let doit être indentée et les définitions de membre doivent correspondre à celle-ci.

Questions connexes