2016-02-10 3 views
-1

Я не понимаю, синтаксис этих:Что означают `|` и `&`?

@myVar = @myVar | 2 
if @myVar & 3 == 3 

Почему они отличаются от:

@myVar = 2 
if @myVar == 3 
+2

Это побитовые операторы, а не булевы операторы. – eugen

ответ

2
@myVar = @myVar | 2 //bitwise or operator 

если MYVAR первоначально 0, это будет делать 0 | 2 который равен 2.

if @myVar & 3 == 3 // bitwise AND, and boolean compare 

будет делать myVar & 3 и будет проверять, если результат равен 3

@myVar = 2 
if @myVar == 3 

Это суммарно разные, не операторы (OTER, чем = 2) не aplied. Таким образом, результат будет всегда одинаковым. Он всегда присваивает 2 myVar и проверяет, равен ли он 3. Вы можете так же написали if 2 == 3

+0

ОП спросил о синтаксисе, но вы объяснили семантику. –

+0

@ JörgWMittag: arrrggg ... :-) – Stefan

+0

, но почему, если '@ myvar' равен нулю (undefined) перед' @myVar | Результат 'истина'? – markzzz

1

Я новичок в Ruby, и я не понимаю, синтаксис этих:

@myVar = @myVar | 2 
if @myVar & 3 == 3 

Есть несколько синтаксических элементов в первом линия:

  • foo = bar является назначение.
  • @foo является переменной экземпляра.
  • foo | bar является бинарным оператором инфикса и как (почти все) бинарных операторы инфиксного (за исключением ||, &&, and и or), это синтаксический сахар для foo.|(bar), т.е. посылая сообщение | к объект, полученный путем оценки foo, передающего объект, полученный путем оценки bar в качестве единственного аргумента.
  • 2 является целым числом.

Вторая строка просто синтаксически недействительна.

почему отличаются от:

@myVar = 2 
if @myVar == 3 

Первая строка снова состоит из переменной экземпляра, присваивания, и целое число буквального, вторая линия снова синтаксически неверно.

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