以下のスカラーコードがあります。スーパークラスを持つ関数をパラメータとして持つ関数への引数としてSubclassを渡す関数
trait Super
case class Sub(value:String) extends Super
case class YetAnotherSub(value:String) extends Super
case class OnlyErrorType(value:String) extends Super
def function1[I <: Super, R](mapper : (I) => R, input: Super) (default: R): R = input match {
case error: OnlyErrorType =>
default
case success: I => mapper(success) // Ideally success => mapper(success)
case _ => default // I don't want this line at all, as I'm not expecting any other type
}
def function2(input:String):Super = if(input.size >= 3) Sub("Greater") else OnlyErrorType("Lesser")
def function3(input:String):String = {
val result = function2(input)
function1({sub:Sub => sub.value.toUpperCase}, result) ("Empty Result")
}
function3("Input")
いくつかのパラメータを受け入れ、Super
の任意のサブタイプを返すfunction2
に似たさまざまな機能があります。私は、function1
のように、一般的なマッパーを持っている他のいくつかのタイプにタイプSuper
をマッピングするために、私はOnlyErrorType
のために取り扱い、いくつかのデフォルトを持っていると思いますつまりOnlyErrorType
の場合はデフォルト値を返しますが、聞かせたいと思います呼び出し関数(この場合はfunction3
)は、SuccessTypeのマッピングを指定します(サブタイプはSuper
(OnlyErrorType
以外))。
どうすればよいですか?上記のコード
はコンパイルが、私はこれを行うには良い方法がなければならないと思います
warning: abstract type pattern I is unchecked since it is eliminated by erasure
、警告を見て嫌い。
私は最初の提案がうまくいきました。コンパイルされません。 – nobody
提案を修正しました。 –