Tôi đang chơi tối nay với F # và redis. Tôi đang sử dụng ServiceStack.redis để kết nối với MSOpenTech redis chạy trên localhost. Đối với một mục đích thử nghiệm tôi đã cố gắng để tiết kiệm giá Bitcoin vào redis với mã như thế này:ServiceStack.Redis with F # không lưu trữ dữ liệu. Nhưng gần như cùng một mã trong C# hoạt động
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()
Thật không may, kết quả từ PrintDump là:
[
{
__type: "Program+BitstampLast, RedisSave",
Id: 0,
Timestamp: 0,
Value: 0
}
]
Chỉ cần cho mục đích thử nghiệm, tôi chạy gần như giống hệt mã trong C# trên cùng dụ 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();
}
}
Và kết quả ...
[
{
__type: "CSharpRedis.BitstampLast, CSharpRedis",
Id: 1,
Timestamp: 1386459953,
Value: 714.33
}
]
Vì vậy, tôi đang thiếu gì? Tại sao nó hoạt động trong C# và không có trong F #?
EDIT: BitstampLast được định nghĩa như vậy:
type BitstampLast = {Id:int64; Timestamp:int; Value:decimal}
đó là sai, bởi vì nó nên là:
type BitstampLast = {mutable Id:int64; mutable Timestamp:int; mutable Value:decimal}
Và bây giờ nó hoạt động. Câu hỏi tiếp theo sau đó - tại sao nó nên được thay đổi? Có redis somewehow mess với đối tượng này?
Bạn đã xác định 'BitstampLast' trong dự án F # của mình như thế nào? –
Đây là gợi ý tuyệt vời. Tôi đã thay đổi thành mutable, bởi vì tôi thấy nó trên một số blog. Tôi rất muốn tìm hiểu thêm, tại sao điều này nên được đặt thành có thể thay đổi. – mlusiak