2017-07-30 21 views
0

以下のコードは正常に動作しているようです。しかし、私の質問は、関数が入力として文字列を取るように定義されている理由ですが、一番下にはいくつかの入力整数を受け入れましたか?スカラケースクラスはどのような入力を受け入れますか?

ケースクラス

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となります。数字をStringからIntに変換する場合はtoIntを使用することもできます。

0
あなたの関数は、引数として1つの Stringを取る

..

def parseLine(line: String): TempData 

そして、1つの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には、整数は含まれていません。 Stringを分割してIntを抽出するのは、関数の本体です。

編集:あなたの投稿のタイトルについて:そのすべてはあなたのTempDataケースクラスとは関係ありません。ケースクラスコンストラクタの呼び出しをparseLineの呼び出しと混同しているようです。

+0

しかし、 "Verizon、2017、Alpha、October、Gentlemen、10.3,5、Dallas、67、schools、42"は関数に入力されたものであり、文字列ではありません。これは文字列と整数の組み合わせです。 – Leealp

+0

私はタイトルを心配していません。私はちょうど私の質問を投稿できるようにそこに何かを入力しました。私の本当の疑問は、関数に入力されていることです。 – Leealp

+0

これは 'String'です。これらの数字はテキストであり、同じ 'String'の一部です。 'val a:Int = 42'と' val b:String = "42" 'の違いを理解してください(引用符に注意してください)。 – fxlae

関連する問題