我的任務是從給定的檔案中讀取注冊資訊,例如:
Keri,345246,2
Ingar,488058,2
Almeta,422016,1
并將它們插入一個串列((String,Int,Int)的元組。
到目前為止,我寫了這個:

問題是我不明白為什么我不能嘗試將 value2 和 value3 轉換為 Int 即使它們應該是字串,因為它們來自字串陣列。有人可以告訴我,我的錯誤是什么,我對 Scala 比較陌生
uj5u.com熱心網友回復:
如果要撰寫Java代碼,使用Scala有什么意義?
這就是您將檔案作為List案例類正確讀取的方式。
import scala.io.Source
import scala.util.Using
// Use proper names for the fields.
final case class Registration(field1: String, field2: Int, field3: Int)
// You may change the error handling logic.
def readRegistrationsFromFile(fileName: String): List[Registration] =
Using(Source.fromFile(fileName)) { source =>
source.getLines().map(line => line.split(',').toList).flatMap {
case field1Raw :: field2Raw :: field3Raw :: Nil =>
for {
field2 <- field2Raw.toIntOption
field3 <- field3Raw.toIntOption
} yield Registration(field1 = field1Raw.trim, field2, field3)
case _ =>
None
}.toList
}.getOrElse(default = List.empty)
(請隨時詢問您對此代碼可能有的任何問題)
uj5u.com熱心網友回復:
在 Scala 中,為了將 a 轉換String為 an,Int您需要顯式轉換。
如果您確定可以將字串決議為整數,則可以這樣實作:
val values = values(1).toInt
如果您不能信任輸入(并且您可能不應該),您可以使用.toIntOptionwhich 將給您一個已Option[Int]定義的值是否已成功轉換,或者如果字串不代表整數則為未定義。
uj5u.com熱心網友回復:
前面的答案是正確的。我還要補充幾點。
saveContent被宣告為val. 這意味著它不能被更改(分配另一個值)。您可以使用 Scala REPL(命令列)工具來檢查:
scala> val saveContent = Nil
val v: collection.immutable.Nil.type = List()
scala> saveContent = 3
^
error: reassignment to val
相反,您可以使用 a var,盡管具有像 Luis Miguel 的答案提供的那樣的整體模式會更慣用 - 具有模式匹配和理解。
- 您也可以使用 Scala REPL 檢查變數的型別。拆分字串總是會導致更多的字串,而不是整數等。
> val values = "a,2,3".split(",")
val values: Array[String] = Array(a, 2, 3)
> values(2)
val res3: String = 3
這就是為什么像蓋爾這樣的演員陣容是必要的。
- 在 Scala 中,陣列型別的訪問是用括號而不是方括號完成的。見上文,http://scalatutorials.com/tour/interactive_tour_of_scala_lists了解更多詳情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486214.html
標籤:斯卡拉
下一篇:在主執行緒上等待回呼方法
