我在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;
}
的实例?
答案 0 :(得分:5)
这是一个已知的错误。
Scalac 使用-unchecked
标志为此生成警告:
warning: The outer reference in this type test cannot be checked at run time.
case _: B.A1 => println("B")
^
现在,B.A1
和C.A1
在模式匹配中与编译器看起来相同,因为它不会检查B
或C
的外部引用
请参阅此related discussion。