2015-03-03 7 views
4

В чем разница между ними?В чем разница между == ~ и! =?

Зачем использовать один над другим?

def variable = 5 
if(variable ==~ 6 && variable != 6) { 
    return '==~ and != are not the same.' 
} else { 
    return '==~ and != are the same.' 
} 
+3

Это не '== ~', это '==' и '~'. По крайней мере, на Java. Вы говорите о Java или Groovy? – immibis

+1

Я говорю о Groovy, упс. – kschmit90

+2

Рассматривая документацию, можете ли вы выделить то, что неясно об их различии? http://groovy-lang.org/operators.html –

ответ

8

В заводной, то ==~ оператор (он же оператор "матч") используется для регулярного выражения соответствия. != - просто обычный обычный «не равный». Так что это очень разные вещи.

cf. http://groovy-lang.org/operators.html

+1

Использует ли '== ~' в качестве оператора соответствия для 'variable == ~ 6'? –

+1

Хороший вопрос на самом деле. Обычно для регулярного выражения требуется слэш, но короткий тест с 'def var = 3;' привел к: 'var == ~ 4;' будучи 'false' и' var == ~ 3; 'является' true', поэтому там может быть какая-то специальная обработка. Однако я не профессионал. – Marvin

+0

@SotiriosDelimanolis Чтобы, наконец, пролить свет на этот вопрос: косые черты в groovy - это специальное требование для шаблонов, а вместо этого просто другой способ объявления строки. Таким образом, '/ foo /' на самом деле совпадает с '' foo''.И я считаю, что groovy просто обрабатывает '6' как' "6" '(поскольку переменная является нетипизированным' def'). – Marvin

6

В Java != является «не равно» и ~ является "побитовое НЕ". Вы действительно будете делать variable == ~6.

В Groovy, ==~ Операция: "Регулярное совпадение". Примерами могут служить:

  1. "1234" ==~ /\d+/ -> вычисляет true
  2. "nonumbers" ==~ /\d+/ -> вычисляет false
+4

В groovy есть оператор '== ~'. См. Http://groovy-lang.org/operators.html – Marvin

0

В Groovy вы также должны иметь в виду, что в дополнение к ==~, псевдоним «Match оператор», есть также =~, псевдоним «Найти Оператор» и ~, псевдоним «оператор Pattern».

Все пояснено here.

типа ==~ результата: Boolean/boolean (неты примитивов в Groovy, все не так, как кажется!) Тип

=~ результата: java.util.regex.Matcher

~ Тип результата: java.util.regex.Pattern

I предположим, что интерпретатор Groovy/компилятор может различать ~, используемый в качестве оператора Pattern, и ~ используется как поразрядным NOT (т.е. его использование в Java) через контекст: первый всегда будет следовать шаблону, который всегда будет заключен в скобки в разделителях, обычно /.

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