LINUX.ORG.RU

Pattern matching в Scala

 


0

2

Привет всем!

Почитываю «scala для нетерпеливых». В главе про сопоставление с образцом есть указание, что использовать match для сопоставления типов, вместо instanceOf. Например:

t match {
  case x: String => ...
  case y: Int  => ...

Чем это обосновано? Причина исключительно идеологическая или instanceOf и match работают различными способами для проверки принадлежности к типу?

★★★★★

match умеет делать статическую проверку case-выражений, емнип.

NegatiV ()
Ответ на: комментарий от NegatiV

То есть, когда это возможно - тип проверяется статически, когда нет - вызывается instanceOf?

mono ★★★★★ ()
Ответ на: комментарий от mono

в match как минимум: определяются case-выражения, которые никогда не отработают (грубо говоря, instanceOf всегда false), гарантируется что оно исчерпывающее (exhaustive) и для любого набора входных данных отработает тело case-выражения. Не в знаю как в Scala, но в OCaml проверка match всегда статическая, думаю в Scala - тоже, но клясться в этом не буду. :)

NegatiV ()

Чем это обосновано?

Для начала, такая запись делает гораздо менее вероятной ошибку вида

if (foo instanceof Foo)
    ((Bar)foo).doFoo();

Ещё такая форма используется для destructuring, ну и о проверка компилятора уже сказали.

tailgunner ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.