像这样做演员的好方法和工作方式是什么?
seq { yield (box "key", box "val") }
|> Seq.cast<string*string>
因为这看起来非常难看:
seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> k.ToString(), v.ToString())
以及:
seq { yield (box "key", box "val") }
|> Seq.map (fun (k,v) -> unbox<string>(k), unbox<string>(v))
有没有办法去&#34; unbox&#34;一个元组进入另一个元组?
答案 0 :(得分:8)
你可以把它写得更好:
seq { yield (box "key", box "val") }
|> Seq.map (fun (k, v) -> string k, string v)
但是,想象一下,你有一个Tuple2
模块:
module Tuple2 =
// ... other functions ...
let mapBoth f g (x, y) = f x, g y
// ... other functions ...
使用这样的mapBoth
函数,您可以将演员表编写为:
seq { yield (box "key", box "val") } |> Seq.map (Tuple2.mapBoth string string)
FSharp.Core 中没有Tuple2
模块,但我经常在我的项目中定义一个模块,包含各种方便的单行程序,如上图所示。