2017-02-17 21 views
0

我試圖將List [Any]轉換爲具有某些數據類型的元組。將列表[Any]轉換爲具有不同類型值的元組

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) 
     } 
    } 

,但我有錯誤:

Expression of type Any doesn't conform to expected type Int

+0

最初的用例是什麼?我可以扔你[形狀](https://github.com/milessabin/shapeless),但我不知道這是否是正確的解決方案。 – Reactormonk

+0

我嘗試轉換數據,以便將其導入到光滑的數據庫中 –

+0

您正嘗試在此處執行一系列隱式轉換。你的錯誤是說,因爲第一個元素是Any,所以你不能強制它成爲一個Int,根據你的返回類型,返回的Tuple中的第一個元素必須是它。您可以從Any中爲每種類型編寫[轉換](http://docs.scala-lang.org/tutorials/tour/implicit-conversions)並將它們放在範圍內,儘管這看起來過多。看起來你可能會解析輸入的行。如果是這樣,那麼你可以使用現有的[marshallers](http://spray.io/documentation/1.2.4/spray-httpx/marshalling/) – WillD

回答

1

你可以寫

case (i1: Int) :: (i2: Int) :: // etc 
  1. 如果你有很多類似的案件有不同的目標的元組,你確實想要的東西,像無形的(可以處理相同的元組大小)。

  2. : Option[String]模式實際上只能檢查參數是一個Option。您會收到關於此的警告,使用Option[String @unchecked]可以忽略此警告,但只有在確定您確實會得到Option[String]後才能執行此操作。

+0

@ K.Palyanichka這個解決方案實際上比我的更可取。但是你現在知道你可以使用'asInstanceOf' :)將「任意值」轉換爲另一個值 – acidghost

0

您可以嘗試使用x.asInstanceOf[T]將每個值轉換爲其基本類型。因此,例如x.asIntanceOf[Int]會將任何x轉換爲Int

相關問題