に準拠していない、その入力パラメータの1つとして、FUNCを関数を受け取りvalidateCell、。以下のようになります:発現は、私が機能を持っている期待String型
def validateCell[String](cellKey: String, cell: Option[String], func:(String) => Boolean): Tuple2[Boolean, String] = {
cell match {
case Some(cellContents) => (func(cellContents), s"$cellContents is not valid.")
case None => (false, s"$cellKey, not found.")
}
}
次のように私は関数を呼び出す:
val map = Map("Well" -> "A110")
validateCell("Well", map.get("Well"), BarcodeWell.isValidWell)
次のように私はそれが問題に関連はないと思うけれども、この場合に渡される関数は、次のとおりです。
def isValidWell(w: String): Boolean = {
val row: String = w.replaceAll("[^A-Za-z]", "")
val col: Int = w.replaceAll("[^0-9]+", "").toInt
isValidRow(row) && isValidColumn(col)
}
私はタプル(ブール値、文字列)を返すようにvalidateCellを期待していますが、私は次のエラーを取得:
を0Error:(5, 55) type mismatch;
found : java.lang.String
required: String(in method validateCell)
case Some(cellContents) => (func(cellContents), s"$cellContents is not valid.")
私はこのエラーがそうのようなScalaの文字列へのcase文によって返される各タプルにJavaの文字列を変換することにより、離れて行くことができます:
s"$cellContents is not valid.".asInstanceOf[String]
s"$cellKey, not found.".asInstanceOf[String]
これは本当に愚かなようです。私はここで何が欠けていますか?この変換はScalaによって自動的に処理されるべきではありません。なぜ私の文字列が最初にJava文字列としてキャストされるのですか?
あなたは正しく推測しました。ご説明ありがとうございます。 –