今晚我和F#和redis一起玩.我正在使用ServiceStack.redis连接到在localhost上运行的MSOpenTech redis.出于测试目的,我试图用这样的代码将比特币的价格保存到redis中:
let redis = new RedisClient("localhost") redis.FlushAll() let redisBitstamp = redis.As() let last = {Id = redisBitstamp.GetNextSequence(); Timestamp = 1386459953; Value=714.33M} redisBitstamp.Store(last) let allValues = redisBitstamp.GetAll() allValues.PrintDump()
不幸的是,PrintDump的结果是:
[ { __type: "Program+BitstampLast, RedisSave", Id: 0, Timestamp: 0, Value: 0 } ]
出于测试目的,我在同一个redis实例上的C#中运行了几乎相同的代码:
class BitstampLast { public Int64 Id { get; set; } public int Timestamp { get; set; } public decimal Value { get; set; } } class Program { static void Main(string[] args) { var redis = new RedisClient("localhost"); redis.FlushAll(); var redisBitstamp = redis.As(); var last = new BitstampLast() {Id = redisBitstamp.GetNextSequence(), Timestamp = 1386459953, Value=714.33M}; redisBitstamp.Store(last); var allValues = redisBitstamp.GetAll(); allValues.PrintDump(); } }
结果......
[ { __type: "CSharpRedis.BitstampLast, CSharpRedis", Id: 1, Timestamp: 1386459953, Value: 714.33 } ]
那么,我错过了什么?为什么它在C#中工作,而在F#中不起作用?
编辑:BitstampLast的定义方式如下:
type BitstampLast = {Id:int64; Timestamp:int; Value:decimal}
这是错的,因为它应该是:
type BitstampLast = {mutable Id:int64; mutable Timestamp:int; mutable Value:decimal}
现在它有效.接下来的问题 - 为什么它应该是可变的?redis有些混乱了这个对象吗?