Как удалить тип Nothing, соответствующий фазе case (scala)?

Во время функции я использую простой код:

 match{
   case Some(one)=>one.copy()
   case Type =>
   ...
   case _ =>
}

Возникает ошибка, так как Nothing является подтипом каждого типа и у Nothing нет функции копирования.

Кто-нибудь знает, как удалить сопоставление типов Nothing и Null при использовании фазы совпадения?


person user504909    schedule 06.08.2014    source источник


Ответы (1)


Прежде всего следует отметить, что экземпляров Nothing не существует. , поэтому вы никогда не окажетесь в ситуации, когда ваше совпадение получит значение Nothing.

Тем не менее, для общего случая наиболее очевидным способом является просто предоставить случаи для тех первых - случаи тестируются и выполняются по порядку, поэтому добавление их до случая, в котором возникает проблема, приведет к желаемому поведению:

??? match {
   case null => ???
   case Some(one) => one.copy()
   case Type =>
   ...
   case _ => ???
}

Очевидно, что одним из основных моментов типа Option является отсутствие необходимости в проверках null. Если вы получаете null в переменной Option, вероятно, стоит изменить код, чтобы этого никогда не произошло.

person Gareth Latty    schedule 06.08.2014
comment
Проверка null отличается от проверки Nothing. Если вы хотите проверить Nothing, вам понадобится _ : Nothing, но, как вы заметили, это не имеет смысла. В любом случае это не избавит от ошибки OP. - person sepp2k; 06.08.2014