根据Scala中的 Programming ,第23.4节,for表达式可以包含模式,其中泛型形式如下所示:
for (pat <- expr1) yield expr2
将由编译器转换为以下内容:
expr1 withFilter {
case pat => true
case _ => false
} map {
case pat => expr2
}
我的问题是这是否适用于类型模式,如果情况明显如下,则不明确:
val t = List("a", 1, 1.0)
for ((y : String) <- t) yield y
这里y: String
被解释为类型声明,而不是类型化模式(并且不能编译)。但是,扩展表单可以正常工作:
t withFilter {
case y :String => true
case _ => false
} map {
case y : String => y
}
只是想知道是否有办法在for表达式中表达该位置的类型模式。
答案 0 :(得分:1)
您可以使用@
绑定匹配的模式作为变量。像:
for (s @ (_x : String) <- t) yield s
其中(_x : String)
是[{1}}的类型模式,s
是变量。
以上代码将翻译为:
s