我想将一个函数应用于同构元组的两个成员,导致另一个元组。从我previous question继我限定的操作,似乎是有道理的对我说:是否有一个函数将函数应用于元组的每个成员?
let (||>>) (a,b) f = f a, f b
但是,我又觉得这可能是一个常见的情况,但在标准库中找不到它。它存在吗?
我想将一个函数应用于同构元组的两个成员,导致另一个元组。从我previous question继我限定的操作,似乎是有道理的对我说:是否有一个函数将函数应用于元组的每个成员?
let (||>>) (a,b) f = f a, f b
但是,我又觉得这可能是一个常见的情况,但在标准库中找不到它。它存在吗?
我不认为有任何的标准库函数做到这一点。
我个人的偏好是避免过多的运营商定制(它们使代码更短,但他们使其难以对谁没见过的定义之前人们阅读)。应用功能的元组的两个元素在逻辑上是接近上列出了地图操作(适用的功能列表中的所有元素),所以我可能会定义Tuple2.map
:
module Tuple2 =
let map f (a, b) = (f a, f b)
然后你可以使用功能很好地与流水线:
let nums = (1, 2)
nums |> Tuple2.map (fun x -> x + 1)
我喜欢你的推理,我会带你的推荐endation。我能问你为什么定义一个新的模块Tuple2而不是扩展现有的Tuple? – AlexFoxGill
啊... 2指的是元组的大小? – AlexFoxGill
@AlexG是:-)名称“Tuple2”指的是元组的大小。但如果你只需要两元元组,那么'Tuple.map'或'Pair.map'会更好。 –
如果你真的知道你在做什么:http://www.nut-cracker.com.ar/index.php/functions-for-n-tuples –
现在感动[这里](http://nut-cracker.azurewebsites.net/functions-for-n-tuples) – Gustavo