F#静态成员

时间:2010-03-07 23:48:35

标签: f#

我正在研究PDC 2008 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'。此点或其他标记之前或之前的预期不完整结构化构造。
 有谁知道他们是否改变了语法或者能够发现我做错了什么

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:6)

单词static之前的缩进使编译器感到困惑,并且它试图将其解释为let表达式的一部分。 let表达式应缩进,成员定义应与其一致。