Kolayca bunu yapamaz, ancak yansıma biraz mümkündür:
let isTuple tuple =
Microsoft.FSharp.Reflection.FSharpType.IsTuple(tuple.GetType())
let tupleValues (tuple : obj) =
Microsoft.FSharp.Reflection.FSharpValue.GetTupleFields tuple |> Array.toList
let rec flatten tupleFields =
tupleFields |> List.collect(fun value ->
match isTuple value with
| true -> flatten (tupleValues value)
| false -> [value]
)
let tupleToList (tuple : obj) =
if isTuple tuple
then Some (tupleValues tuple |> flatten)
else None
Yani, örneğin:
let s = tupleToList ((100,101,102,103),1,2,3,(4,5))
size verecek :
[100; 101; 102; 103; 1; 2; 3; 4; 5]
NOT: Bu CEV er kodu bulunan here dayanmaktadır.
FParsec'te, daha fazla ayrıştırıcıyı birleştirmek için 'tuple3, tuple4, tuple5' veya' pipe3, pipe4, pipe5' işlevlerini kullanabilirsiniz; bu, böyle bir şeye olan ihtiyacınızı ortadan kaldırabilir. – TheInnerLight
@TheInnerLight great point Teşekkürler –