在Scala中从元组执行函数
我有一个元组,其中存储了匿名函数,我想遍历它们并执行它们在Scala中从元组执行函数,scala,function,lambda,functional-programming,tuples,Scala,Function,Lambda,Functional Programming,Tuples,我有一个元组,其中存储了匿名函数,我想遍历它们并执行它们 val functions = ((x:Int, y:Int) => x + y, (x:Int, y: Int) => x - y) // I want to execute the anonymous functions in the Tuple functions.productIterator.foreach(function => function) 不幸的是,我不能这样做 functions.product
val functions = ((x:Int, y:Int) => x + y, (x:Int, y: Int) => x - y)
// I want to execute the anonymous functions in the Tuple
functions.productIterator.foreach(function => function)
不幸的是,我不能这样做
functions.productIterator.foreach(function => function(1, 2))
或
出路是什么
元组上的产品迭代器
返回迭代器[Any]
,而不是您所期望的迭代器[Function2[Int,Int,Int]
。元组不应该被迭代。类型丢失是因为元组中的每个条目都可以是不同的类型,因此类型系统只假设Any
(因此迭代器[Any]
)。因此,真正的建议是,如果要迭代,请使用Seq
或Set
之类的集合
另一方面,如果您知道元组包含特定类型的函数,则可以通过使用asInstanceOf
强制转换来绕过类型检查,但不建议这样做,因为类型检查是您的朋友
functions.productIterator.map(_.asInstanceOf[(Int,Int)=>Int](1, 2))
// produces `Iterator(3, -1)`
或者,查看中的HLists,它具有元组和集合的属性。我们可以将元组的元素提取到序列中,同时保留类型信息;因此
Seq(functions._1, functions._2).map(_(1,2))
List(3, -1)
同意,在这种情况下我该如何应对;是否有方法进行模式匹配,然后执行函数。
Seq(functions._1, functions._2).map(_(1,2))
List(3, -1)