文字¶ ↑
文字建立可以在程式中使用的物件。文字包括
布林值和 Nil 文字¶ ↑
nil
和 false
都是 false 值。nil
有時用來表示「沒有值」或「未知」,但在條件式中會評估為 false
。
true
是 true 值。除了 nil
和 false
之外的所有物件在條件式中都會評估為 true 值。
數字文字¶ ↑
整數文字¶ ↑
你可以用以下方式撰寫任何大小的整數
1234 1_234
這些數字具有相同的值,1,234。底線可用於增強人類的可讀性。你可以在數字中的任何地方放置底線。
你可以使用特殊前綴以十進位、十六進位、八進位或二進位格式撰寫數字。對於十進位數字,請使用前綴 0d
,對於十六進位數字,請使用前綴 0x
,對於八進位數字,請使用前綴 0
或 0o
,對於二進位數字,請使用前綴 0b
。數字的字母元件不區分大小寫。
範例
0d170 0D170 0xaa 0xAa 0xAA 0Xaa 0XAa 0XaA 0252 0o252 0O252 0b10101010 0B10101010
所有這些數字都具有相同的十進位值,170。就像整數和浮點數一樣,你可以使用底線以提高可讀性。
浮點數文字¶ ↑
浮點數可以寫成如下
12.34 1234e-2 1.234E1
這些數字具有相同的值,12.34。你也可以在浮點數中使用底線。
有理數文字¶ ↑
你可以使用特殊字尾 'r'
撰寫 Rational
文字。
範例
1r # => (1/1) 2/3r # => (2/3) # With denominator. -1r # => (-1/1) # With signs. -2/3r # => (-2/3) 2/-3r # => (-2/3) -2/-3r # => (2/3) +1/+3r # => (1/3) 1.2r # => (6/5) # With fractional part. 1_1/2_1r # => (11/21) # With embedded underscores. 2/4r # => (1/2) # Automatically reduced.
語法
<rational-literal> = <numerator> [ '/' <denominator> ] 'r' <numerator> = [ <sign> ] <digits> [ <fractional-part> ] <fractional-part> = '.' <digits> <denominator> = [ sign ] <digits> <sign> = '-' | '+' <digits> = <digit> { <digit> | '_' <digit> } <digit> = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
請注意,這會被解析為浮點數分子 1.2
除以有理數分母 3r
,產生浮點數
1.2/3r # => 0.39999999999999997
複數文字¶ ↑
你可以撰寫 Complex
數字如下(字尾 i
)
1i #=> (0+1i) 1i * 1i #=> (-1+0i)
有理數也可以是虛數。
12.3ri #=> (0+(123/10)*i)
i
必須置於 r
之後;相反則不允許。
12.3ir #=> Syntax error
字串¶ ↑
字串文字¶ ↑
寫入字串最常見的方式是使用 "
"This is a string."
字串可以是多行。
任何內部的 "
都必須跳脫。
"This string has a quote: \". As you can see, it is escaped"
雙引號字串允許跳脫字元,例如換行符號的 \n
、標籤的 \t
等。支援的跳脫序列完整清單如下
\a bell, ASCII 07h (BEL) \b backspace, ASCII 08h (BS) \t horizontal tab, ASCII 09h (TAB) \n newline (line feed), ASCII 0Ah (LF) \v vertical tab, ASCII 0Bh (VT) \f form feed, ASCII 0Ch (FF) \r carriage return, ASCII 0Dh (CR) \e escape, ASCII 1Bh (ESC) \s space, ASCII 20h (SPC) \\ backslash, \ \nnn octal bit pattern, where nnn is 1-3 octal digits ([0-7]) \xnn hexadecimal bit pattern, where nn is 1-2 hexadecimal digits ([0-9a-fA-F]) \unnnn Unicode character, where nnnn is exactly 4 hexadecimal digits ([0-9a-fA-F]) \u{nnnn ...} Unicode character(s), where each nnnn is 1-6 hexadecimal digits ([0-9a-fA-F]) \cx or \C-x control character, where x is an ASCII printable character \M-x meta character, where x is an ASCII printable character \M-\C-x meta control character, where x is an ASCII printable character \M-\cx same as above \c\M-x same as above \c? or \C-? delete, ASCII 7Fh (DEL)
反斜線後面的任何其他字元都解釋為字元本身。
雙引號字串允許使用 #{...}
內插其他值。
"One plus one is two: #{1 + 1}"
任何表達式都可以置於內插區段中,但最好將表達式保持簡短以利閱讀。
您也可以使用 #@foo
、#@@foo
和 #$foo
分別作為 #{ @foo }
、#{ @@foo }
和 #{ $foo }
的簡寫。
可以透過跳脫「#」字元或使用單引號字串來停用內插。
'#{1 + 1}' #=> "\#{1 + 1}"
除了停用內插之外,單引號字串還會停用所有跳脫序列,除了單引號 (\'
) 和反斜線 (\\
)。
相鄰的字串文字會由解釋器自動串接。
"con" "cat" "en" "at" "ion" #=> "concatenation" "This string contains "\ "no newlines." #=> "This string contains no newlines."
任何相鄰的單引號、雙引號、百分比字串的組合都會串接,只要百分比字串不是最後一個。
%q{a} 'b' "c" #=> "abc" "a" 'b' %q{c} #=> NameError: uninitialized constant q
還有一個字元文字符號用於表示單一字元字串,其語法是一個問號 (?
) 後面接一個單一字元或跳脫序列,該序列對應於腳本編碼中的單一碼點
?a #=> "a" ?abc #=> SyntaxError ?\n #=> "\n" ?\s #=> " " ?\\ #=> "\\" ?\u{41} #=> "A" ?\C-a #=> "\x01" ?\M-a #=> "\xE1" ?\M-\C-a #=> "\x81" ?\C-\M-a #=> "\x81", same as above ?あ #=> "あ"
另請參閱
Here Document 文字¶ ↑
如果您正在撰寫一大段文字,可以使用「here document」或「heredoc」
expected_result = <<HEREDOC This would contain specially formatted text. That might span many lines HEREDOC
heredoc 從 <<HEREDOC
之後的行開始,並以下一行開頭的 HEREDOC
結束。結果包括結尾換行符號。
您可以在 heredoc 中使用任何識別碼,但通常使用全大寫識別碼。
如果您在 <<
之後加上「-」,則可以縮排結尾識別碼
expected_result = <<-INDENTED_HEREDOC This would contain specially formatted text. That might span many lines INDENTED_HEREDOC
請注意,雖然結尾識別碼可以縮排,但內容始終被視為齊左。如果您縮排內容,這些空格將出現在輸出中。
若要使用縮排內容和縮排結尾識別碼,可以使用「波浪形」heredoc,其在 <<
後面使用「~」而不是「-」
expected_result = <<~SQUIGGLY_HEREDOC This would contain specially formatted text. That might span many lines SQUIGGLY_HEREDOC
縮排最少的行縮排會從內容的每一行移除。請注意,空白行和僅包含文字 tab 和空格的行在決定縮排時會被忽略,但跳脫的 tab 和空格被視為非縮排字元。
在測量縮排時,一個水平 tab 視為一個到八個空格的序列,其對應的欄位位置是八的倍數。要移除的數量以空格數計算。如果邊界出現在 tab 中間,則不會移除該 tab。
heredoc 允許內插和跳脫字元。你可以透過用單引號包圍開啟識別碼來停用內插和跳脫
expected_result = <<-'EXPECTED' One plus one is #{1 + 1} EXPECTED p expected_result # prints: "One plus one is \#{1 + 1}\n"
識別碼也可以用雙引號(與不使用引號相同)或反引號包圍。當用反引號包圍時,HEREDOC 會像 Kernel#‘
puts <<-`HEREDOC` cat #{__FILE__} HEREDOC
當用引號包圍時,任何字元(除了引號和換行符號 (CR 和/或 LF))都可以用作識別碼。
若要呼叫 heredoc 上的方法,請將其放在開啟識別碼之後
expected_result = <<-EXPECTED.chomp One plus one is #{1 + 1} EXPECTED
你可以在同一行開啟多個 heredoc,但這可能難以閱讀
puts(<<-ONE, <<-TWO) content for heredoc one ONE content for heredoc two TWO
符號文字¶ ↑
Symbol
代表 Ruby 解譯器中的名稱。有關符號是什麼以及 Ruby 何時在內部建立符號的更多詳細資訊,請參閱 Symbol
。
你可以使用冒號來參考符號::my_symbol
。
你也可以透過內插建立符號
:"my_symbol1" :"my_symbol#{1 + 1}"
與字串一樣,可以使用單引號來停用內插
:'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}"
在建立 Hash
時,還有一個特殊語法可以參考 Symbol
。
另請參閱
陣列文字¶ ↑
陣列是使用 [
和 ]
之間的物件建立的
[1, 2, 3]
你可以在陣列中放置表達式
[1, 1 + 1, 1 + 2] [1, [1 + 1, [1 + 2]]]
另請參閱
有關你可以對陣列使用的函式,請參閱 Array
。
雜湊文字¶ ↑
雜湊是使用 {
和 }
之間的鍵值對建立的
{ "a" => 1, "b" => 2 }
鍵和值都可以是任何物件。
您可以使用下列語法,建立使用符號鍵的雜湊
{ a: 1, b: 2 }
此語法也用於方法的關鍵字引數。
就像 Symbol
文字一樣,您可以引用符號鍵。
{ "a 1": 1, "b #{1 + 1}": 2 }
等於
{ :"a 1" => 1, :"b 2" => 2 }
Hash
值可以省略,表示值會根據鍵的名稱從內容中擷取
x = 100 y = 200 h = { x:, y: } #=> {:x=>100, :y=>200}
請參閱 Hash
,以了解您可以與雜湊一起使用的各種方法。
範圍文字¶ ↑
範圍代表一個值區間。範圍可以包含或排除其結束值。
(1..2) # includes its ending value (1...2) # excludes its ending value (1..) # endless range, representing infinite sequence from 1 to Infinity (..1) # beginless range, representing infinite sequence from -Infinity to 1
您可以建立任何物件的範圍。請參閱 Range
文件,以取得您需要實作的方法詳細資料。
正規表示式文字¶ ↑
可以使用前導和尾隨斜線 ('/'
) 字元建立正規表示式
re = /foo/ # => /foo/ re.class # => Regexp
尾隨斜線後面可以接續一個或多個修改字元,用於設定正規表示式的模式。請參閱 正規表示式模式,以取得詳細資料。
插補可以使用在正規表示式中,連同跳脫字元。請注意,正規表示式可能需要比字串更多的跳脫字元。
另請參閱
請參閱 Regexp
,以取得正規表示式語法的說明。
Lambda Proc
文字¶ ↑
可以使用 ->
建立 lambda proc
-> { 1 + 1 }
呼叫上述 proc 會產生 2
的結果。
您可以如下要求 proc 的引數
->(v) { 1 + v }
此 proc 會將一加到其引數。
百分比文字¶ ↑
本節中描述的每個文字都可以使用這些成對的定界符號
-
[
和]
。 -
(
和)
。 -
{
和}
。 -
<
和>
。 -
任何其他字元,作為開始和結束定界符號。
這些會在下一節中示範。
%q
:不可插補的 String
文字¶ ↑
您可以使用 %q
撰寫不可插補的字串。建立的字串與使用單引號建立的字串相同
%[foo bar baz] # => "foo bar baz" # Using []. %(foo bar baz) # => "foo bar baz" # Using (). %{foo bar baz} # => "foo bar baz" # Using {}. %<foo bar baz> # => "foo bar baz" # Using <>. %|foo bar baz| # => "foo bar baz" # Using two |. %:foo bar baz: # => "foo bar baz" # Using two :. %q(1 + 1 is #{1 + 1}) # => "1 + 1 is \#{1 + 1}" # No interpolation.
% 和 %Q
:可插補的 String
文字¶ ↑
您可以使用 %Q
或其別名 %
撰寫可插補的字串
%[foo bar baz] # => "foo bar baz" %(1 + 1 is #{1 + 1}) # => "1 + 1 is 2" # Interpolation.
%w 和 %W
:字串陣列文字¶ ↑
您可以使用 %w
(不可插補)或 %W
(可插補)撰寫字串陣列
%w[foo bar baz] # => ["foo", "bar", "baz"] %w[1 % *] # => ["1", "%", "*"] # Use backslash to embed spaces in the strings. %w[foo\ bar baz\ bat] # => ["foo bar", "baz bat"] %w(#{1 + 1}) # => ["\#{1", "+", "1}"] %W(#{1 + 1}) # => ["2"]
%i 和 %I
:符號陣列文字¶ ↑
您可以使用 %i
(不可插補)或 %I
(可插補)撰寫符號陣列
%i[foo bar baz] # => [:foo, :bar, :baz] %i[1 % *] # => [:"1", :%, :*] # Use backslash to embed spaces in the symbols. %i[foo\ bar baz\ bat] # => [:"foo bar", :"baz bat"] %i(#{1 + 1}) # => [:"\#{1", :+, :"1}"] %I(#{1 + 1}) # => [:"2"]
%s
:Symbol
文字¶ ↑
您可以用 %s
寫入符號
:foo # => :foo :foo bar # => :"foo bar"
%r
:Regexp
文字¶ ↑
您可以用 %r
寫入正規表示法;用作前導和尾隨分隔符號的字元可以是(幾乎)任何字元
%r/foo/ # => /foo/ %r:name/value pair: # => /name\/value pair/
幾組「對稱」字元對可以用作分隔符號
%r[foo] # => /foo/ %r{foo} # => /foo/ %r(foo) # => /foo/ %r<foo> # => /foo/
尾隨分隔符號後面可以接一個或多個修改符號,用來設定正規表示法的模式。有關詳細資訊,請參閱正規表示法模式。
%x
:反引號文字¶ ↑
您可以用 %x
寫入和執行 shell 指令
%x(echo 1) # => "1\n"