Leon's Blogging

Coding blogging for hackers.

Ruby - Precedence With Block( {} vs do..end ) and Operator( && vs and, || vs or )

| Comments

按照 ruby 的慣例,單行用 {} 多行用 do..end,但實際上兩個有一些不一樣 就是優先權(precedence)

1
2
3
4
5
6
7
8
puts [1,2,3].map{ |k| k+1 }
2
3
4
# => nil
puts [1,2,3].map do |k| k+1; end
#<Enumerator:0x0000010a06d140>
# => nil

因為 {} 的優先權比 do..end 高,因此括號的地方會如下

1
2
puts ( [1,2,3].map{ |k| k+1 } )
puts ( [1,2,3].map ) do |k| k+1; end

另外一個 優先權(precedence) 的例子是

&& vs and|| vs or

可以發現 &&|| 優先權都大於 andor,因此盡量使用 &&||

1
2
3
4
5
6
7
8
9
10
11
12
x = true && false  # => false
x # => false
x = true and false # 相當於 (x = true) and false
# => false
x # => true


y = false || true  # => true
y # => true
y = false or true  # 相當於 (y = false) and true
# => true
y # => false

參考文件

Comments