Ruby的運(yùn)算符和語(yǔ)句優(yōu)先級(jí)介紹
Ruby 是一種表達(dá)能力很強(qiáng)的語(yǔ)言,這得意于它異常豐富的運(yùn)算符和語(yǔ)法糖,雖然 Ruby 一直把最小驚訝原則作為它的哲學(xué)之一,但還是常??吹阶屓梭@訝不已,難于理解的代碼,這可能是因?yàn)閷?duì)它運(yùn)算符和語(yǔ)句優(yōu)先級(jí)理解不透導(dǎo)致,今天就和大家聊一聊 Ruby 運(yùn)算符和語(yǔ)句的優(yōu)先級(jí)。
先看一句簡(jiǎn)單的代碼,猜一猜它的輸出是什么。
puts {}.class
很多人一定以為結(jié)果是 Hash,但實(shí)事上結(jié)果是空,不信可以在 irb 里試一試。
再看一段代碼。
puts "5 && 3 is #{5 && 3}"
puts "5 and 3 is #{5 and 3}"
a = 5 && 3
b = 5 and 3
puts "a is #{a}"
puts "b is #"
結(jié)果是:
5 && 3 is 3
5 and 3 is 3
a is 3
b is 5
有沒(méi)有覺(jué)得奇怪 b 怎么是 5 而不是 3 呢。
如果這兩個(gè)例子你也覺(jué)得奇怪,那說(shuō)明你對(duì) Ruby 一些運(yùn)算符和語(yǔ)句的優(yōu)先級(jí)理解還不透徹,判斷有誤。 puts {}.class 實(shí)際上相當(dāng)于 (puts {}).class -> nil.class 所以輸出為空。{}相當(dāng)于一個(gè)空的 block,優(yōu)先和方法 puts 結(jié)合。 && 和 and 的優(yōu)先是不同的,而且和 = 號(hào)的優(yōu)先級(jí)順序比較, && > = > and,所以 a = 5 && 3 相當(dāng)于 a = ( 5 && 3),而 b = 5 and 3 相當(dāng)于 ( b = 5 ) and 3,所以結(jié)果 a 和 b的值是不同的。
下面一張表格是 Ruby 中常見(jiàn)的運(yùn)算符和語(yǔ)句的優(yōu)先級(jí)列表,從上到下優(yōu)先級(jí)遞減。
Ruby operators (highest to lowest precedence)

幾條便于記憶的原則:
1.關(guān)鍵字類如if and 等的優(yōu)先級(jí)是要比符號(hào)類低;
2.賦值符號(hào) = ||= 等優(yōu)先級(jí)也比較低,僅次于關(guān)鍵字類;
3.[] []= 元素引用的優(yōu)先級(jí)非常高。
相關(guān)文章
Ruby中使用多線程隊(duì)列(Queue)實(shí)現(xiàn)下載博客文章保存到本地文件
這篇文章主要介紹了Ruby中使用多線程隊(duì)列(Queue)實(shí)現(xiàn)下載博客文章保存到本地文件,本文給出了實(shí)現(xiàn)代碼、并對(duì)代碼的核心部分做了講解,同時(shí)給出了運(yùn)行效果圖,需要的朋友可以參考下2015-01-01
Ruby rails 頁(yè)面跳轉(zhuǎn)(render和redirect_to)
今天在做R.R.log的時(shí)候發(fā)現(xiàn)個(gè)問(wèn)題,在修改密碼的時(shí)候如果沒(méi)有通過(guò)校驗(yàn),沒(méi)有顯示校驗(yàn)錯(cuò)誤的信息。2009-05-05
Ruby設(shè)計(jì)模式編程之適配器模式實(shí)戰(zhàn)攻略
這篇文章主要介紹了Ruby設(shè)計(jì)模式編程之適配器模式實(shí)戰(zhàn)攻略,適配器模式中主張將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,需要的朋友可以參考下2016-03-03
利用RJB在Ruby on Rails中使用Java代碼的教程
這篇文章主要介紹了利用RJB在Ruby on Rails中使用Java代碼的教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04
Java 版的 Ruby 解釋器 JRuby 1.7.14 發(fā)布
JRuby,一個(gè)采用純Java實(shí)現(xiàn)的Ruby解釋器,由JRuby團(tuán)隊(duì)開(kāi)發(fā)。它是一個(gè)自由軟件,在CPL/GPL/LGPL三種許可協(xié)議下發(fā)布。2014-08-08
Ruby中訪問(wèn)SQL Server數(shù)據(jù)庫(kù)的配置實(shí)例
這篇文章主要介紹了Ruby中訪問(wèn)SQL Server數(shù)據(jù)庫(kù)的配置實(shí)例,本文通過(guò)FreeTDS實(shí)現(xiàn),同時(shí)介紹了在ActiveRecord上使用Tiny_TDS的技巧,需要的朋友可以參考下2014-11-11

