【发布时间】:2015-09-23 14:37:23
【问题描述】:
有什么方法可以获取元组长度。
我的意思是让a=(1,2,3) 之类的东西。我必须得到3。
我使用以下代码将元组转换为列表并尝试获取列表的长度,但结果为option 类型,我无法使用它。
let tupleToList t =
if Microsoft.FSharp.Reflection.FSharpType.IsTuple(t.GetType())
then Some (Microsoft.FSharp.Reflection.FSharpValue.GetTupleFields t |> Array.toList)
else None
【问题讨论】:
-
使用当前方法的一个简单解决方案(不管它可能是最好的)是消除或解开正在引入的“选项”;要么在那里(例如,为非元组返回 0 或 -1,否则返回列表的长度)或在使用站点(例如,将其视为“可能代表或可能不代表列表”的任何选项)。
-
首先,元组的 length 在它的类型中是隐含的 - 这就是为什么没有反射 trickery (或其他一些运行时作弊 ;)) - 但在这种情况下,如果您对该函数的输入不是一个元组,那么一个简单的
tupleToList >> Option.map (List.length)将为您提供一个长度为l和None的元组。
标签: f# f#-interactive