亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄 搜尋
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項 RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數(shù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標(biāo)準(zhǔn)類型 深入方法 表達式Expressions 異常,捕捉和拋出(已經(jīng)開始,by jellen) 模塊 基本輸入輸出 線程和進程 當(dāng)遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類和方法 標(biāo)準(zhǔn)庫 OO設(shè)計 網(wǎng)絡(luò)和Web庫 Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結(jié)束時的相關(guān)處理 線程 安全模型 正則表達式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達式 控制結(jié)構(gòu) 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
文字

字面值

  • 數(shù)值字面值
  • 字符串字面值
    • 反斜線表示法
    • 展開式
  • 命令輸出
  • 集成字符串(here document)
  • 正則表達式字面值
  • 數(shù)組表達式
  • 哈希表表達式
  • 范圍對象
  • 符號
  • %表示法

我們把形如數(shù)字1或字符串“hello world”這樣可以直接寫入Ruby程序中的值叫做字面值

數(shù)值字面值

123
0d123 ruby 1.7 特性

整數(shù)

-123

有符號整數(shù) trap::Numeric

123.45

浮點數(shù) ruby 1.8 特性: 不能把0.1寫成".1",而只能完整地寫為0.1。

1.2e-3

浮點數(shù)

0xffff

16進制整數(shù)

0b1011

2進制整數(shù)

0377
0o377 ruby 1.7 特性

8進制整數(shù)

?a

字符a的代碼(97)

ruby 1.7 特性: 用在空白類字符上時,必須寫成這樣,?\s、?\t等。

?\C-a

Control a 的代碼(1)

?\M-a

Meta a 的代碼(225)

?\M-\C-a

Meta-Control a 的代碼(129)

?句中,所有的反斜線表示法都是有效的。

您可以在除了字符代碼以外的數(shù)值字面值中插入“_”。Ruby解釋器會忽視“_”而不作處理。當(dāng)數(shù)值位數(shù)非常多時,使用“_”會讓您快速看清其位數(shù)。但是不能在字面值的前面或后面插入“_”(若在字面值前面(包括(+,-)號與字面值間的位置)插入_時,它會被誤認成局部變量或方法調(diào)用)。

1_000_000_000  => 1000000000
0xffff_ffff  => 0xffffffff

字符串字面值

例:

"this is a string expression\n"
'this is a string expression\n'
%q!I said, "You said, 'She said it.'"!
%!I said, "You said, 'She said it.'"!
%Q('This is it.'\n)

字符串被雙引號或單引號包圍著。在被雙引號中括起來的字符串中,反斜線表示法和展開式(后面詳述)都是有效的。在被單引號括起來的字符串中,除了\\(反斜線本身)、\'(單引號)和行尾的\(忽略換行)以外,不會對字符串內(nèi)容作任何處理。

中間留有空白的字符串在編譯時會被當(dāng)作1個字符串字面值來處理。

p "foo" "bar"
=> "foobar"

還有其他一些使用%表示法的字符串項目。

每次對字符串表達式進行計算時都會生成新的字符串對象。

反斜線表示法

\t

Tab(0x09)

\n

換行(0x0a)

\r

回車(0x0d)

\f

換頁(0x0c)

\b

BackSpace(0x08)

\a

Bell (0x07)

\e

Escape(0x1b)

\s

空白(0x20)

\nnn

8 進制數(shù)表示 (n 為 0-7)

\xnn

16 進制數(shù)表示 (n 為 0-9,a-f)

\cx
\C-x

Control字符 (x 為 ASCII 字符)

\M-x

Meta x (c | 0x80)

\M-\C-x

Meta Control x

\x

字符 x 本身

展開式

例:

(假設(shè)$ruby = "RUBY")

   "my name is #{$ruby}" #=> "my name is RUBY"
   'my name is #{$ruby}' #=> "my name is #{$ruby}"

在以雙引號(")括起來的字符串表達式、命令字符串以及正則表達式中,可以使用“#{表達式}”把表達式的內(nèi)容(以字符串的形式)嵌入其中。若表達式是以($,@)開始的變量的話,則可以省略{}部分,只使用“#變量名”的形式即可。如果在字符#后出現(xiàn)的是“{,$,@”以外的其他字符的話,字符#仍代表"#"本身。若想顯式地阻止展開式的話,在#前添加反斜線即可。

展開式中可以包括雙引號和其他的Ruby表達式。注釋也可以納入其中。

p "#{ "string" # comment }"   # => "string"

ruby 1.7 特性: 在version 1.7中,展開式中的注釋內(nèi)容開始于“#”終止在行尾,而非“}”。因此,上例應(yīng)該寫成

p "#{ "string" # comment
  }"                          # => "string"

這個樣子。

命令輸出

例:

`date`
%x{ date }

被后引號(`)括起來的字符串與被雙引號括起來的字符串是一樣的。首先會處理其中的反斜線表示法和展開式,然后才會執(zhí)行該命令。命令的標(biāo)準(zhǔn)輸出是字符串。每次計算命令時都會把它執(zhí)行一次。若想得到命令的結(jié)束status,請參考$?。

還有其他一些使用%表示法的命令輸出。

here document - 集成字符串 (多行字符串的字面值)

語法:

<<[-]["'`]標(biāo)識符["'`]
   ...
標(biāo)識符

普通的字符串字面值是指使用分隔符(", ', ` 等)括起來的字符串部分。集成字符串是指,把從包含“<<標(biāo)識符”的行的下一行開始,到只包含“標(biāo)識符”的行的行首之間的內(nèi)容封裝起來之后得到的多行字符串(的字面值)。例如

print <<EOS      # (從這里開始)直到標(biāo)識符 EOS 之前的部分就是字面值
  the string
  next line
EOS

等同于下例

print "  the string\n  next line\n"

集成字符串中的開始標(biāo)簽“<<標(biāo)識符”具有非常重要的語法意義。您可以使用開始標(biāo)簽,將集成字符串的內(nèi)容傳遞給某參數(shù),或者把集成字符串本身當(dāng)作被調(diào)(receiver)使用。

# 在表達式中加入開始標(biāo)簽
# 把集成字符串的內(nèi)容傳遞給method的第2個參數(shù)
method(arg1, <<LABEL, arg2)
    集成字符串的具體內(nèi)容
LABEL

# 將集成字符串用作被調(diào)
p  <<LABEL.upcase
the lower case string
LABEL

# => "THE LOWER CASE STRING"

開始標(biāo)簽的下一行通常是集成字符串的具體內(nèi)容。例如,下面的寫法是錯誤的。

printf('%s%d',
       <<EOS,
       3055 * 2 / 5)   # <- 該行已經(jīng)混入集成字符串的內(nèi)部
This line is a here document.
EOS

若把開始標(biāo)簽寫成“<<-標(biāo)識符”的話,表示集成字符串的最后一行將使用縮進格式。除此以外,您不能在最后一行中加入空白或是注釋。

if need_define_foo
  eval <<-EOS   # 使用'<<-'后 
    def foo
      print "foo\n"
    end
  EOS
  #↑最后一行使用了縮進格式。
end

您還可以在同一行中使用多個集成字符串。

print <<FIRST, <<SECOND
   這里是第一個集成字符串的內(nèi)容。
   這里也是。
FIRST
   從該行開始第二個集成字符串的內(nèi)容。
   第二個集成字符串將在本行后面結(jié)束。
SECOND

您可以使用引號(""、''或``)將開始標(biāo)簽“<<標(biāo)識符”中的標(biāo)識符括起來。這時,集成字符串的性質(zhì)將取決于您所選擇的引號的種類。請參考下列,當(dāng)您選擇雙引號時,其效果與不使用任何引號時的效果相同。

# 反斜線表示法和展開式都是有效的
print <<"EOS"
The price is #{$price}.
EOS

# 效果同上
print <<EOS
The price is #{$price}.
EOS

# 展開式無法工作
print <<'EOS'
The price is #{$price}.
EOS

# 執(zhí)行命令
print <<`EOC`
date
diff test.c.org test.c
EOC

請參考 字符串字面值、 展開式、 反斜線表示法、 命令輸出 來了解字符串字面值的性質(zhì)

正則表達式字面值

例:

/^Ruby the OOPL/
/Ruby/i
/my name is #{myname}/o
%r|Ruby|

被/括起來的部分就是正則表達式。關(guān)于正則表達式中元字符的用法問題,請參考正則表達式。

尾部/后面的字符是正則表達式中使用的選項。具體內(nèi)容如下。

i

匹配時不區(qū)分字母大小寫

o

開始計算正則表達式時只處理一次展開式

x

正則表達式中的空白(包括換行)將被忽視。同時,從"#"到行尾的部分將被當(dāng)作注釋處理(請注意,若注釋中包含/則會引起語法解析錯誤)。

/foo        # 注釋
 bar/x

等同于 /foobar/。

若想包含空白,可以像\一樣使用轉(zhuǎn)義。

m

多行模式。正則表達式 "."將會匹配換行。

因為Ruby的日語化做得比較好,您可以設(shè)定$KCODE使其能夠正確處理日語字符。若$KCODE =“n”時,Ruby將不會識別任何日語字符,而把它們當(dāng)作字節(jié)串處理,這是默認狀態(tài)。

您還可以擺脫$KCODE的束縛,分別為每個正則表達式指定n, e, s, u中的任意一個選項來確定該正則表達式的字符代碼。

您還可以使用%表示法來指定其他形式的正則表達式。

在正則表達式中,反斜線表示法和 展開式也是有效的。

若正則表達式字面值中不含展開式的話,則對其進行計算時始終返回同一個正則表達式對象。若含有展開式的話,則每次(以展開式的結(jié)果為基礎(chǔ))進行計算時都會編譯正則表達式并生成正則表達式對象(但是,若指定了上述的o選項的話,則返回同一個正則表達式對象)。

數(shù)組表達式

例:

[1, 2, 3]
%w(a b c)
%W(a b c)             ((<ruby 1.7 特性>))

語法:

`[' 表達式`,' ... `]'

分別計算每個表達式的值,然后返回由這些值構(gòu)成的數(shù)組。數(shù)組是Array類的實例。

當(dāng)數(shù)組元素都是字符串字面值時,可以使用%表示法將數(shù)組寫成其他形式。

每次對數(shù)組表達式進行計算時都會返回一個新的數(shù)組對象。

哈希表表達式

例:

{1=>2, 2=>4, 3=>6}

語法:

`{' 表達式 `=>' 表達式 `,' ... `}'
`{' 表達式 `,' 表達式 `,' ... `}'

分別計算每個表達式的值,然后返回由索引和值構(gòu)成的哈希表對象。所謂哈希表是指將任意對象當(dāng)作索引而構(gòu)成的數(shù)組,它是Hash類的實例。

當(dāng)向某方法的參數(shù)尾部傳遞哈希表,且該哈希表中的元素超過1個時,可以省略{,}。但是,在形如obj[...]的方法調(diào)用以及數(shù)組表達式中,當(dāng)所有元素都是哈希表時,才可以省略{,}。

例:

method(1,2,3=>4)      # method(1,2,{3=>4})
obj[1=>2,3=>4]        # obj[{1=>2,3=>4}]
[1=>2,3=>4]           # [{1=>2, 3=>4}]

每次對哈希表表達式進行計算時都會生成一個新的哈希表對象。

范圍對象

請參考范圍表達式

若范圍表達式兩端都是數(shù)值字面值時,每次計算都將返回同一個對象。除此以外,每次計算時都會返回新的范圍對象。

符號

例:

(符號的例子)

      :class
      :lvar
      :method!
      :andthisis?
      :$gvar
      :@ivar
      :@@cvar
      :+

語法:

`:' 標(biāo)識符
`:' 變量名
`:' 操作符

Symbol類的實例。字符串與Symbol對象是一一對應(yīng)的。

指定給Symbol字面值的操作符,必須是那些可以作為方法進行再定義的操作符。請參考操作符表達式。

ruby 1.7 特性: 在1.7中,也可以這樣

p :'foo-bar' #=> :"foo-bar"
p :"foo-bar" #=> :"foo-bar"
p %s{foo-bar} #=> :"foo-bar"

在這種表示法中,可以定義任意的符號(但不能包含“\0”)。

:"..." 中,反斜線表示法和 展開式都是有效的。

通常符號是一種很專一的對象,計算時(就算包含展開式也好,只要其結(jié)果是同一字符串的話)總是返回同一對象。

%表示法

在字符串字面值、 命令輸出、 正則表達式字面值、 數(shù)組表達式、 符號 中,可以使用這種以%開頭的表達法。特別是當(dāng)字符串或正則表達式中包含雙引號(")、斜線(/)等(切分字面值時使用的字符)要素時,它可以減少反斜線(\)在代碼中出現(xiàn)的次數(shù)。另外,它還可以方便地表示字符串?dāng)?shù)組。詳細內(nèi)容如下。

  • %!STRING! : 雙引號中的字符串
  • %Q!STRING! : 同上
  • %q!STRING! : 單引號中的字符串
  • %x!STRING! : 命令輸出
  • %r!STRING! : 正則表達式
  • %w!STRING! : 字符串?dāng)?shù)組(以空白字符切分各元素)
  • %W!STRING! : 字符串?dāng)?shù)組(以空白字符切分各元素)。展開式、反斜線表示法都有效(ruby 1.7 特性)
  • %s!STRING! : 符號。展開式、反斜線表示法都無效(ruby 1.7 特性)

!部分可以使用任何非字母非數(shù)字的字符,包括換行。若起始切分字符是括號("(","[","{","<")的話,則終止切分字符就是與其對應(yīng)的括號。若以括號作為切分字符的話,只要對應(yīng)部分使用了對應(yīng)的括號,就可以在其中的元素中使用與切分字符一樣的括號。

%(()) => "()"

若在數(shù)組表達式中使用%表示法的話,相當(dāng)于使用空白字符將數(shù)組中以單引號括起來的字符串元素分隔開來。例如,

%w(foo bar baz)

['foo', 'bar', 'baz']是一樣。

還可以使用反斜線將空白字符納入數(shù)組元素。

%w(foo\ bar baz)

=> ["foo bar", "baz"]

ruby 1.7 特性:%W與%w相同,就如同雙引號中的字符串一樣,可以使用展開式和反斜線表示法。但使用空白字符進行切分的過程要早于展開式的計算過程。

v = "c d"
%W(a\ b #{v}e\sf #{})

=> ["a b", "c de f", ""]

上一篇: 下一篇: