2017-07-30 53 views
0

下面的代码似乎工作正常。但我的问题是,为什么函数被定义为将字符串作为输入,但是在底部,它已经接受了一些输入整数?scala case类接受什么输入?

案例类

TempData(year:Int, month:String, Prec:Double, Maxtemp:Int, Meantemp:Int, Mintemp:Int) 
    def parseLine(line:String):TempData = { 
     val p = line.split(",") 
     TempData(p(1).toInt, p(3).toString, p(5).toDouble, p(6).toInt, p(8).toInt, p(10).toInt) 
    } 

    //> parseLine: (line: String)Tests.TempData 
    parseLine("Verizon, 2017, Alpha, October, gentlemen, 10.3, 5, Dallas, 67, schools, 42") 
    //> res0: Tests.TempData = TempData(2017, October, 10.3, 5, 67, 42) 

回答

0

定义的函数parseLine(line: String)需要String类型参数,并且您已正确传递它。令人困惑的是,您正在将字符串中存在的数字视为不正确的整数(Int)。字符串中的数字仅为String,因为您已将它们括在引号中。您也可以推理使用toIntString中的数字转换为Int类型。

0

你的函数有一个单一的String作为参数..

def parseLine(line: String): TempData 

和一张单String正是传递给它:

scala> "Verizon,2017,Alpha,October,gentlemen,10.3,5,Dallas,67,schools,42" 
res0: String = Verizon,2017,Alpha,October,gentlemen,10.3,5,Dallas,67,schools,42 

这些数字只是纯文本,并且是的一部分,没有涉及整数。这是您的函数的主体将String分开并从中提取Int

编辑:关于您的帖子的标题:所有这些与您的TempData案例类别无关。看起来你把案例类构造函数的调用与parseLine的调用搞混了。

+0

但是,“Verizon,2017,Alpha,10月,先生们,10.3,5,达拉斯,67,学校,42”是函数中输入的内容,它不是字符串。它是字符串和整数的混合。 – Leealp

+0

我并不担心标题。我只是在那里输入了一些东西,可以发布我的问题。我真正的问题是关于什么是函数的输入。 – Leealp

+0

这是一个'String'。这些数字只是文本,是同一个'String'的一部分。尝试理解'val a:Int = 42'和'val b:String =“42”'之间的区别(注意引号)。 – fxlae