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