我正在尝试编写一个包含Map<int64, customType>
基础集合的F#类型,以便我可以向其中添加项目:
type public CandleContainer (seedCandles:System.Collections.Generic.IEnumerable<Candle>) =
let candles : Map<int64, Candle> =
seedCandles
|> Seq.map (fun x -> x.Start.Ticks, x)
|> Map.ofSeq
let candleInterval = TimeSpan.FromMinutes(1.0)
member public x.AddCandle (candle:Candle) =
candles = candles.Add(candle.Start.Ticks, candle)
member public x.GetList () : List<Candle> =
candles
|> Map.toSeq
|> Seq.map (fun (key, value) -> value)
|> Seq.toList
我遇到的问题是在AddCandle方法中。据我所知,Map.Add返回一个添加了值的新地图,编译器并没抱怨我正试图覆盖蜡烛的值。但是,每当我尝试使用此方法添加新的Candle时,x.GetList将返回一个空列表。有没有办法用Map.Add的结果覆盖蜡烛的旧值?或者我只是将蜡烛变成可变值并覆盖它?
答案 0 :(得分:2)
您要找的是mutable
关键字和<-
运营商。
将let candles ...
更改为
let mutable candles : Map<int64, Candle>
和candles = ...
candles <- candles.Add(candle.Start.Ticks, candle)
。另请注意,您之前使用=
您认为正在进行替换的情况实际上是执行了相等检查,从而使该方法的返回类型为bool
。