scala で構造型の等価性をチェックしているだけです。
foo
すぐに無名クラスと type からインスタンスを作成しますQ
。メソッド名で区別するつもりなので、構造的に別の型として扱ってほしい。
コードスニペット:
scala> val foo = new {def foo=1}
a: AnyRef{def foo: Int} = $anon$1@3885c37f
scala> type Q = {def q:Unit}
defined type alias Q
scala> foo.isInstanceOf[Q]
<console>:14: warning: a pattern match on a refinement type is unchecked
foo.isInstanceOf[Q]
^
res55: Boolean = true
チェックは true を返します。
Q1:foo
が のインスタンスである理由が
わかりませんQ
。それはナンセンスです。型構造の意味が違うのではないですか?
Q2: では、構造型を確認する正式な方法は何ですか?