返ってくる型がわからないときは、Anyを使う?
昨日、5/14と書いた以下のエントリでは、関数に指定する型パラメータで悩んでいたけど、結局戻ってくる値がわからないのであればAnyを返す、というのでちゃんと動くようにできた。
僕が2015/5/14に書いた型パラメータに関するエントリがすごく間違っている気がする - 趣味プログラマがまれになんかしたことの記録
共変とか反変とかわからないので躓いている - 趣味プログラマがまれになんかしたことの記録
case class K[+A](a:A) { val list = List[A](a) } def returnListOfK(filename:String):List[K[Any]] = { val data = scala.io.Source.fromFile(filename).getLines.toArray val alphas = """[a-z]+""".r val nums = """\d+""".r val ary = data.map{ _ match { case alphas(_*) => K[String]("String") case nums(_*) => K[Int](0) case _ => K[Int](-1) } } ary.toList } val listK = returnListOfK(args(0)) println(listK) println(listK(0).getClass.getSimpleName)
関数の型パラメータは、与える引数の型を指定する際に必要ということのようで、すなわち戻り値の型が問題となる場合は型パラメータは指定しない。そして、戻り値の型が決まってない場合はAnyで良いんじゃないかな?(なんか間違ってる気もするけど)