沒什麼好說的,惟一須要說明的是分數字面量:數值後加上一個後綴字母r
表示分數字面量。正則表達式
# 整數字面量 0 1 100 10_000_001 # 千分位 # 浮點數字面量 0.1 1.0 1.2222 # 分數字面量 1r # 等價於(1/1) 2r # 等價於(2/1) 0.3r # 等價於(3/10) 0.4r-0.1r # 等於(2/5) - (1/10) == (3/10) 0.4r-0.1r == 0.3r # true
引號和Perl中的引號相似。shell
例如,單引號不解釋變量內插和反斜線序列等,雙引號解釋變量內插和反斜線序列等,反引號用於執行對應的命令。此外,反引號中能夠進行變量內插,也就是說反引號中字符的會按照雙引號進行解釋,例如a=haha;str=`echo #{a} one line`
獲得的結果爲str=haha one line
。數組
此外,Ruby支持三引號,包括三個雙引號、三個單引號,用來實現簡單的heredoc功能。雙引號能夠進行變量內插,單引號不可變量內插:ruby
one=1 two=2 three=3 puts """ line #{one} line #{two} line #{three} """ puts ''' line #{one} line #{two} line #{three} '''
%
用於簡化常量的定義。code
下面的中括號邊界符能夠替換爲其它對稱符號或相同的符號。例如()
、<>
、||
、##
。對象
%q[]
:定義字符串,但不解釋內插表達式。例如%q(abc def)
等價於"abc def"
,邊界符(即這裏的中括號[
和]
)須要使用反斜線轉義%Q[]
或%[]
:定義字符串,但解釋內插表達式。例如a="abc"
時,b=%Q(#{a})
等價於b="abc"
%w[]
和%W[]
:定義數組,數組元素不須要引號包圍,數組元素使用空白符號(能夠是換行符)分隔%i[]
:建立符號數組。例如%i(Perl Python)
等價於[:Perl, :Python]
%r[]
:定義正則表達式,會解釋內插表達式。此外,正則的修飾符能夠出如今邊界符的後面,例如%r(a.*b)i
表示不區分大小寫的正則對象%s[]
:定義符號(Symbol),不會解釋內插表達式%x[]
:定義要執行的shell命令,就像shell下的反引號同樣,這部分會被看成雙引號包圍,會解釋內插表達式
a=%x(echo hahaha)
表示將echo的輸出結果保存到變量a中,而%x
執行的過程當中並不輸出數據`
方法,因此,也能夠直接調用這個方法執行一段shell命令:Kernel.`(echo hahaha)
heredoc
和Perl的heredoc基本同樣。blog
<<END
:等價於雙引號的heredoc<<"END"
:按雙引號去解釋heredoc內容,因此會解釋內插表達式和反斜線序列<<'END'
:按單引號去解釋heredoc內容,因此不會解釋內插表達式和反斜線序列<<`END`
:使用shell去執行heredoc的內容str1 = <<END one line END # str1="one line" a="one line" str2 = <<"END" #{a} END # str2="one line" a="one line" str3 = <<'END' #{a} END # str3="#{a}" a="one line" str4 = <<`END` echo haha #{a} END # str4="haha one line"
heredoc的起始符前能夠加上一個短橫線"-",使得終止符能夠縮進編寫,還可使用~
,使得正文和結束符都能縮進,但返回的結果不縮進。例如:three
str1 = <<-ONE one line ONE # 終止符ONE縮進了 str2 = <<-"TWO" two\nline # 換行符被解釋 TWO puts <<~END one line # 結果中,這兩行沒縮進 two line END
heredoc的起始行中起始符後面的內容不會被解釋。因此:字符串
arr = [<<END, "two", "three"] # END後面的不會解釋 one line END # arr = ["one line", "two", "three"]
事實上,當Ruby解釋器遇到<<
的時候就當即跳轉到它下面的行中讀取數據直到遇到結尾符號,而後從新回到here doc的開頭行繼續向後讀取,因此上面<<END
和END
中間的行先被讀取,讀取完END以後回頭讀two、three字符串。class
heredoc能夠堆疊多個doc棧。例如:
arr = [<<ONE, <<TWO, <<THREE,] one line ONE two line TWO three line THREE # arr=["one line", "two line", "three line"]