我在一个小型F#项目中使用StackExchange.Redis,我需要将db.StringGetAsync()返回值强制转换为int。我已经找到了这样做的方法:
let! intFromRedis= async {
let! value = db.StringGetAsync(key) |> Async.AwaitTask
return int value
}
但是能够做这样的事情会更漂亮:
// Better syntax but it does not compile
let! intFromRedis : int = db.StringGetAsync(key) |> Async.AwaitTask
这有更好的语法吗?
答案 0 :(得分:2)
正如评论中指出的那样,从技术上讲,问题要求Async.map
,其定义可以与问题中的代码类似。
但我宁愿建议保持简单。第二行的投射如下所示:
let! redisValue = db.StringGetAsync(key) |> Async.AwaitTask
let intFromRedis = int redisValue
我甚至不确定intFromRedis
比int redisValue
更具可读性。它只是短暂的,后一种表达方式是不言自明的。因此,仅保留第一行并使用int redisValue
没有真正的问题。
使用稀有或自定义功能会降低可读性。一个演员 - 也许是一个值绑定 - 很简单,足够短,任何阅读代码的程序员都应该了解正在发生的事情。