Scala 将列表[Any]转换为具有不同类型值的元组

Scala 将列表[Any]转换为具有不同类型值的元组,scala,Scala,我正在尝试用一些数据类型将List[Any]转换为tuple def matchValue(list: List[Any]):(Int, Int, Int, Option[String], String,Option[Date],String, Date,String, Option[Int],Option[String])= { list match { case i1::i2::i3::i4::i5::i6::i7::i8::i9::i10::i11 =>

我正在尝试用一些数据类型将List[Any]转换为tuple

def matchValue(list: List[Any]):(Int, Int, Int, Option[String], String,Option[Date],String, Date,String, Option[Int],Option[String])= {
      list match {
        case i1::i2::i3::i4::i5::i6::i7::i8::i9::i10::i11 => (i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
      }
    }
但我有一个错误:

Any类型的表达式不符合预期的Int类型

你可以写

case (i1: Int) :: (i2: Int) :: // etc
  • 如果您有许多类似的情况,并且目标元组不同,那么您确实需要类似于shapeless的东西(可以处理相同的元组大小)

  • :Option[String]
    模式实际上只能检查参数是否为
    选项。您将得到一个关于此的警告,可以通过使用
    选项[String@unchecked]
    忽略该警告,但只有在您确定确实会得到
    选项[String]
    时,才应该这样做


  • 您可以尝试使用
    x.asInstanceOf[T]
    将每个值转换为其基本类型。例如,
    x.asintenceof[Int]
    将任何
    x
    转换为
    Int

    初始用例是什么?我可以扔给你,但我不确定这是否是正确的解决方案。我尝试转换数据,以便使用Slick将其导入db。你尝试在这里进行一系列隐式转换。您的错误是,由于第一个元素是Any,您不能将其强制为Int,根据您的返回类型,返回的元组中的第一个元素必须是Int。您可以从任何类型写入所需的每种类型,并将它们放在范围内,尽管这似乎有些过分。看起来您可能正在解析输入行。如果这是真的,那么你可以使用现有的@K.Palyanichka这个解决方案实际上比我的更可取。但您现在知道,您可以使用
    asInstanceOf
    :)将任何值“强制”转换为另一个值