【发布时间】:2019-12-06 22:22:47
【问题描述】:
我有一些像这样的实用函数,它们返回不同长度的元组:
let get1And2Of4(v1, v2, v3, v4) = v1, v2
let get1And2And3Of4(v1, v2, v3, v4) = v1, v2, v3
我希望能够对变量进行模式匹配并返回适当的实用函数。
例如,
let bar =
match foo with
| "A" -> get1And2Of4
| "B" -> get1And2And3Of4
但是,编译器会抱怨,因为元组的长度不同。阅读Variable length tuples in f# 和Elegant pattern matching on nested tuples of arbitrary length 说明这是不可能的。
鉴于我需要使用元组而不是列表,是否还有其他选择可以实现这一点?
【问题讨论】:
-
myFrame |> Series.mapValues (Stats.levelMean myLvlFun)中请注明myFrame、Series.mapValues、Stats.levelMean的类型。这将明确myLvlFun的所需类型。 -
这些来自 Deedle 库 bluemountaincapital.github.io/Deedle,但我会更新问题以包括在内。
-
从类型签名中,你有一个
Series<(int * string * string * int),float>,并且想用mapValues改变第二个参数,所以你需要给它一个函数float -> b才能得到一个@987654334 @ 到底。它是否正确?您还没有接近给它float -> b,所以我可能是错的。我们几乎没有什么信息可以猜测您要做什么,因为您给出了一个不起作用的方法,但是问题的定义是由一行代码给出的,这也没有意义。很难猜出你的问题是什么。 -
不幸的是,这并没有成为一个更容易理解的问题。 “保持这个的最佳选择是什么”是一个问题,但寻求替代的东西不存在,所以这应该是“什么是最好的方法来做到这一点”,但你还没有说什么“这个”是。
-
您希望
bar返回两部分或三部分的元组。让我们想象一下已经完成了。你能指定接下来你想用这个值做什么吗?如果您对列表样式的操作不感兴趣,但对元组样式的操作感兴趣,您希望对其执行哪些操作?你将无法做到,例如。bar.Third如果bar不一定包含Third组件。
标签: f#