在Scala中使用类型检查的误解

时间:2015-10-15 12:39:04

标签: scala

我在Scala中有简单的类型层次结构:

def get(): Any = C.C1

get() match {
    case _: B.A1 => println("B")
    case _: C.A1 => println("C")
    case _: A#A1 => println("Any")
}

而且,我会像这样使用这些类型:

B

令人惊讶的是,我正在打印C(我预计C.C1)。

为什么编译器会将B.A1视为function myplugin_jplayer_script() { global $post; $key = 'your_key'; $id = 'your_id'; $playlist = get_post_meta($post->ID, $key, false);; $out = ''; $out .= '<script type="text/javascript">'; if( $playlist ) { $out .= 'var myCirclePlayer = new CirclePlayer("' . $id . '", {'; foreach($playlist as $file){ $out .= 'm4a: "'. $file .'",'; } $out .= '}, { cssSelectorAncestor: "#cp_container_1", swfPath: "../../dist/jplayer", wmode: "window", keyEnabled: true });'; } $out .= '</script>'; return $out; } 的实例?

1 个答案:

答案 0 :(得分:5)

这是一个已知的错误。

Scalac 使用-unchecked标志为此生成警告:

warning: The outer reference in this type test cannot be checked at run time.
            case _: B.A1 => println("B")
                  ^

现在,B.A1C.A1在模式匹配中与编译器看起来相同,因为它不会检查BC的外部引用

请参阅此related discussion

SI-4440