【Scala 19】functionインパラメータ型逆変換について、結果コヒーレンスを返す
888 ワード
class CSuper {
}
class C extends CSuper {
}
class C2 extends CSuper {
}
class CSub extends C {
}
object Scala8 {
/***
*
* @return
*/
val func1 : C=>C = (c : CSuper) => new CSub
val func2 : C=>C = (c : C) => new C
//val func3: C=>C = (c: CSub) => new C
//val fun4:C=>C = (c:C2)=>new C
def main(args : Array[String]): Unit = {
}
}
func 1の戻り値がC=>Cであるため、func 1()(XXX)では、XXXはCまたはCのサブタイプでなければならず、CまたはCのサブタイプは必然的にCSuperに変換することができ、すなわち、XXXオブジェクトは(c:CSuper)=>new CStubのパラメータとすることができる.
ただしXXXオブジェクトはCSubまたはC 2に変換できないためfunc 3,func 4はコンパイルエラーがある
fun 1,func 2はいずれも関数の(一意の)パラメータがインバータであり,戻り値がコヒーレントである関数数値面量である関数数値面量である.
val func1 : C=>C = (c : CSuper) => new CSub
以上のようにfunc 1の宣言タイプはC=>Cであり、実際に定義されたタイプは(c:CSuper)=>new CSubである