Avatar
ちょっとおもしろい事を知った。 any P<T: P> に implicit open されるときの挙動で、 もしインスタンスの型がクラス(C2)で、その P conformanceが親クラス (C1) で行われていた場合、 openする型はそのまま値の型 (C2) になる。
4:28 PM
一見、open の実装は正しいように見えるが、この挙動のおかげで、 tとuにC1とC2を渡すと、tがC1のときは u as? C1 が成功するが、 tがC2のときは u as? C2 は失敗するので実行結果が変わる。
4:29 PM
しかし、 C2 の P 準拠は C1 で行われているので、 C2.equals は 2つの C1 を受け取る関数になっていて、本来は C2 と C1 を渡す事ができる。(check で確認)
4:31 PM
C2P への準拠は、 Self = C1 としての準拠になっていると言えるので、 openする時の TC1 として open されるほうが自然な気もするし、 実際の値のmetatypeがそのまま出てくる今の挙動のほうが自然な気もする。