小编Mar*_*rio的帖子

如何重构以避免F#Lint的警告?

我在一个编译和有效工作的函数中有以下嵌套的Seq.map()调用:

|> Seq.map (fun (tradedOnKey : DateTime, portfolioSeq : seq<PortfolioId * seq<PortfolioFundRecord>>) ->
        let pricedPortfoliosGroup = 
            portfolioSeq 
            |> Seq.map (fun (p : PortfolioId, spsf : (seq<PortfolioFundRecord>)) ->
                let price = 
                    spsf 
                    |> Seq.map (fun (pfr : PortfolioFundRecord) -> pfr.Fund.ClosingPrice * float pfr.PortfolioWeight / 100.0) 
                    |> Seq.reduce (+)
                let topPortfolioFundRecord = spsf |> Seq.head
                { PortfolioId = p; Price = price; TradedOn = topPortfolioFundRecord.Fund.TradedOn }
            )
        (tradedOnKey, pricedPortfoliosGroup)
)
Run Code Online (Sandbox Code Playgroud)

提示以下lint警告:

Lint:Seq.map f (Seq.map g x)也许可以重构成Seq.map (g >>f) x …

f#

4
推荐指数
1
解决办法
129
查看次数

为什么F#懒洋洋地评估这个,下面两次?

我期待下面第一行中的引号在F#中急切地评估.它被懒惰地评估了两次.为什么?

let quotes = getFundsClosingPrice dbFunds // httpGet the closing prices
quotes
|> fun quotes ->
    let maxDate =
        quotes // <- quotes evaluated 1st time
        |> Seq.maxBy (
            fun (quote) -> 
                quote.TradedOn)
        |> fun q -> 
            q.TradedOn
    quotes
    |> Seq.map 
        (fun (quote) -> // <- quotes evaluated 2nd time. Why??
            { 
                Symbol = quote.Symbol; 
                ClosingPrice = quote.ClosingPrice; 
                TradedOn = maxDate
            }
        )
Run Code Online (Sandbox Code Playgroud)

我如何热切地评估它?

f# lazy-evaluation

4
推荐指数
1
解决办法
103
查看次数

标签 统计

f# ×2

lazy-evaluation ×1