国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Ruby的運(yùn)算符和語句優(yōu)先級(jí)介紹

2019-10-26 19:25:26
字體:
供稿:網(wǎng)友

Ruby 是一種表達(dá)能力很強(qiáng)的語言,這得意于它異常豐富的運(yùn)算符和語法糖,雖然 Ruby 一直把最小驚訝原則作為它的哲學(xué)之一,但還是常常看到讓人驚訝不已,難于理解的代碼,這可能是因?yàn)閷?duì)它運(yùn)算符和語句優(yōu)先級(jí)理解不透導(dǎo)致,今天就和大家聊一聊 Ruby 運(yùn)算符和語句的優(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 #{b}"

結(jié)果是:

代碼如下:
5 && 3 is 3
5 and 3 is 3
a is 3
b is 5

有沒有覺得奇怪 b 怎么是 5 而不是 3 呢。

如果這兩個(gè)例子你也覺得奇怪,那說明你對(duì) Ruby 一些運(yùn)算符和語句的優(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 中常見的運(yùn)算符和語句的優(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í)非常高。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巨鹿县| 休宁县| 垦利县| 且末县| 高安市| 上杭县| 皋兰县| 安龙县| 阳原县| 大同市| 姚安县| 唐山市| 嘉鱼县| 嘉黎县| 阿合奇县| 获嘉县| 休宁县| 鄯善县| 长治县| 长寿区| 普兰店市| 米脂县| 通山县| 吐鲁番市| 江达县| 孟州市| 宾阳县| 时尚| 昌邑市| 绥中县| 武鸣县| 柘城县| 伊金霍洛旗| 顺义区| 南京市| 年辖:市辖区| 乡城县| 嘉鱼县| 隆尧县| 商河县| 红河县|