我想要一个函数来消耗7的元组,但编译器不会让我显示所显示的消息。我没有找到一个正确的方法来做到这一点。甚至可以在没有明确地输入所有类型参数(如Tuple7[String,String...,String]
)的情况下进行,甚至可以像这样使用Scala?
def store(record:Tuple7): Unit = {
}
错误:(25,20)类Tuple7采用类型参数
def store(record: Tuple7): Unit = { ^
答案 0 :(得分:2)
您可以执行以下操作:
def store(record: (String, String, String, String, String, String, String)):Unit = {
}
相当于:
def store(record: Tuple7[String, String, String, String, String, String, String]):Unit = {
}
您可以在Scala编程中阅读更多相关内容,第2版,“Scala中的后续步骤”,章节“步骤9.使用元组”。
答案 1 :(得分:2)
如路易斯所述,您必须定义Type
对Tuple
中每个职位的哪个职位进行定义。
我想添加一些方法来以不同的方式表达相同的行为:
为此,您有两种选择,使用什么语法:
Tuple3[String, Int, Double]
(String, Int, Double)
Case Classes
提高可读性的方法长元组很难处理,特别是在重复类型时。 Scala提供了一种不同的方法来处理这个问题。您可以使用带有七个字段的Tuple7
代替case class
。这种方法的好处在于您现在可以将说话名称附加到每个字段,并且如果附加了名称,每个位置的键入也更有意义。
并且将价值放在错误位置的可能性降低了
(String, Int, String, Int)
// vs
case class(name: String, age: Int, taxNumber: String, numberOfChildren: Int)
Seq
与pattern matching
如果你打算将一系列数据seq
与pattern matching
结合使用,那也很合适:
List("name", 24, "", 5 ) match {
case name:String :: age:Int ::_ :: _ :: Nil => doSomething(name, age)
}
这只适用于范围相当缩小的情况。通常,您会丢失很多类型信息,因为List的类型为Any
。