Sto giocando stasera con F # e redis. Sto usando ServiceStack.redis per connettermi a MSOpenTech redis in esecuzione su localhost. Per uno scopo di test che stavo cercando di salvare prezzo di bitcoin in Redis con codice come questo:ServiceStack.Redis con F # non memorizza i dati. Ma quasi lo stesso codice in C# funziona allo
let redis = new RedisClient("localhost")
redis.FlushAll()
let redisBitstamp = redis.As<BitstampLast>()
let last = {Id = redisBitstamp.GetNextSequence(); Timestamp = 1386459953; Value=714.33M}
redisBitstamp.Store(last)
let allValues = redisBitstamp.GetAll()
allValues.PrintDump()
Purtroppo, il risultato da PrintDump era:
[
{
__type: "Program+BitstampLast, RedisSave",
Id: 0,
Timestamp: 0,
Value: 0
}
]
solo a scopo di test, mi sono imbattuto quasi identica codice in C# su stessa istanza Redis:
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<BitstampLast>();
var last = new BitstampLast() {Id = redisBitstamp.GetNextSequence(), Timestamp = 1386459953, Value=714.33M};
redisBitstamp.Store(last);
var allValues = redisBitstamp.GetAll();
allValues.PrintDump();
}
}
E il risultato ...
[
{
__type: "CSharpRedis.BitstampLast, CSharpRedis",
Id: 1,
Timestamp: 1386459953,
Value: 714.33
}
]
Quindi, cosa mi manca? Perché funziona in C# e non in F #?
EDIT: BitstampLast è definita in questo modo:
type BitstampLast = {Id:int64; Timestamp:int; Value:decimal}
che è sbagliato, perché dovrebbe essere:
type BitstampLast = {mutable Id:int64; mutable Timestamp:int; mutable Value:decimal}
E ora funziona. Domande successive quindi - perché dovrebbe essere mutabile? Il redis somiglia in qualche modo a questo oggetto?
Come hai definito 'BitstampLast' nel tuo progetto F #? –
Questo è stato un ottimo suggerimento. Sono passato a mutabile, perché l'ho visto su alcuni blog. Mi piacerebbe saperne di più, perché questo dovrebbe essere impostato su mutabile. – mlusiak