2016-02-10 100 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,这会做​​这等于2

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

will do myVar & 3 and将检查结果是否等于3

@myVar = 2 
if @myVar == 3 

这是完全不同的,没有运算符(oter than = 2)被应用。所以结果总是一样的。它总是将2分配给myVar,并检查它是否等于3。你可能也已经写if 2 == 3

+0

OP询问了语法,但你解释了语义。 –

+0

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

+0

但是为什么如果在@ @ myVar |之前'@ myvar'为零(未定义) 2'结果是'真'? – 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 

第一行再次由一个实例变量,分配,和文字的整数,第二线又在语法上是无效的。