Когда я запускаю следующий фрагмент кода с scala
import scala.language.reflectiveCalls
def foo(a: Option[Any]): Option[Any] = {
a.filter {
case x: { def bar: Boolean } => x.bar
}
}
object Bar {
def bar: Boolean = true
}
println(foo(Some(Bar)))
я получаю предупреждение
предупреждение: совпадение с образцом для типа уточнения не отмечено
Я пробовал следующее:
@unchecked case x: { def bar: Boolean } => x.bar
case (@unchecked x): { def bar: Boolean } => x.bar
case (x @unchecked): { def bar: Boolean } => x.bar
case x: @unchecked { def bar: Boolean } => x.bar
case x: { def bar: Boolean } @unchecked => x.bar
case (x: { def bar: Boolean } @unchecked) => x.bar
case x: ({ def bar: Boolean } @unchecked) => x.bar
case x: { def bar: Boolean } => (x @unchecked).bar
case x: { def bar: Boolean } => (x: { def bar: Boolean } @unchecked).bar
Ни один из них не работает. Это также не работает:
a.filter { any => (any: @unchecked) match {
case x: { def bar: Boolean } => x.bar
}}
Как подавить это предупреждение?
Отчасти похожие ссылки
В этом ответе кажется, что @unchecked
успешно используется внутри Some(...)
, но я не понимаю, как использовать его с filter
.