Ich verwende StackExchange.Redis, um auf eine Redis-Instanz zuzugreifen.Wie rufe ich Redis StringSet() aus F #
Ich habe folgende Arbeits C# -Code:
public static void Demo()
{
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("xxx.redis.cache.windows.net,ssl=true,password=xxx");
IDatabase cache = connection.GetDatabase();
cache.StringSet("key1", "value");
}
Hier ist das, was ich der entsprechende Code F # wäre würde hoffen:
let Demo() =
let cx = ConnectionMultiplexer.Connect @"xxx.redis.cache.windows.net,ssl=true,password=xxx"
let cache = cx.GetDatabase()
cache.StringSet("key1", "value") |> ignore
jedoch dies nicht kompilieren - ‚Keine Übereinstimmung Überlastungen für Methode StringSet '. Die StringSet-Methode erwartet Argumente vom Typ RedisKey und RedisValue, und in C# scheint etwas Compiler-Magie zu laufen, um die Strings im aufrufenden Code in RedisKey und RedisValue zu konvertieren. Die Magie scheint in F # nicht zu existieren. Gibt es eine Möglichkeit, das gleiche Ergebnis zu erzielen?
Gibt es 'RedisKey.op_Implicit' und' RedisValue.op_Implicit' Betreiber? – Daniel
@Daniel - sieht so aus. Wenn ich nach Definition navigieren ich folgendes .fsi erhalten generiert: Typ RedisKey = ... statisches Element op_Implicit: key: string -> RedisKey statisches Element op_Implicit: key: byte [] -> RedisKey statisches Element op_Implicit : key: RedisKey -> byte [] statischer Member op_Implicit: Schlüssel: RedisKey -> String – Kit
Dann müssen Sie tun 'StringSet (RedisKey.op_Implicit" Schlüssel1 ", RedisValue.op_Implicit" Wert ")'. Diese werden automatisch in C#, aber nicht F # aufgerufen. Sie können auch einen "impliziten" Operator definieren (http://stackoverflow.com/a/10720073/162396). – Daniel