2015-01-24 2 views
-4

Я заметил что-то сегодня. Scala имеет обычный OR ||, но также и |.Scala's || и | операторы

Моя первая мысль заключалась в том, что | был строгим ИЛИ. Итак, true | true, будет оцениваться до false. Но

val x = true 
x: Boolean = true 
val y = true 
y: Boolean = true 
x || y 
res4: Boolean = true 
x | y 
res5: Boolean = true 

Что такое | оператор? Это просто псевдоним?

ответ

6

Как и в Java, операторы & и | выполняют то же, что и их обычные версии, но без short-circuiting.

В качестве примера рассмотрим выражение true || isNice(). Метод никогда не будет вызван, потому что true || x всегда истинно, и компилятор (и среда выполнения) это знает. Если вы настаиваете на том, чтобы все части булевского выражения были оценены, вы должны использовать & или |.

Редактировать: Для полноты применения Scala также использует | для альтернативных шаблонов в соответствии с шаблоном. Это копируется из ссылки Язык:

8.1.11 Pattern Альтернативы Синтаксис: шаблон :: = {Pattern1 «|» Pattern1}

Шаблон альтернативы p1 | ... | pn состоит из ряда альтернативных шаблонов pi . Все альтернативные шаблоны проверяются типом с ожидаемым типом шаблона. Они не могут связывать переменные, отличные от подстановочных знаков. Альтернативный шаблон соответствует значение v, если хотя бы один его альтернатив соответствует v.

+0

Я знаю, что это другой вопрос, но имеет ли у java строгий 'ИЛИ'? – Andrey

+1

Это действительно: '^'. 'true^true == false'. Также известен как XOR – Dave

+0

Ссылка: http://www.scala-lang.org/files/archive/spec/2.11/12-the-scala-standard-library.html#class-boolean –

Смежные вопросы