Ruby 中一些百分號( )的用法小結

2021-09-30 12:37:35 字數 4079 閱讀 6194

%q

用於替代雙引號的字串. 當你需要在字串裡放入很多引號時候, 可以直接用下面方法而不需要在引號前逐個新增反斜槓 (\」)

複製** **如下:

%q(joe said: 「frank said: 「#」「)

=> 「joe said: 「frank said: 「hello!」「」

(…)也可用其他非數字字母的符號或成對的符號代替, 諸如[…], !…!, +…+,, <…>等.

以下寫法全部與上面等效:

複製** **如下:

%q!joe said: 「frank said: 「#」「!

%q[joe said: 「frank said: 「#」「]

%q+joe said: 「frank said: 「#」「+

除此之外還可省略q寫作:

複製** **如下:

%/joe said: 「frank said: 「#」「/

=> 「joe said: 「frank said: 「hello!」「」

%q與%q類似, 但是表示的是單引號字串

複製** **如下:

%q(joe said: 『frank said: 『# 』 『)

=> 「joe said: 『frank said: 『# 』 『」

%w語法近似於%q, 用於表示其中元素被雙引號括起的陣列.

複製** **如下:

%w(# bar bar\ with\ space)

=> [「foo」, 「bar」, 「bar with space」]

%w用於表示其中元素被單引號括起的陣列. 比較奇怪的是(斜槓空格)會被轉化成(空格), 但是其他的內容不會.

複製** **如下:

%w(a b c\ d #e #f)

=> [「a」, 「b」, 「c d」, 「\#e」, 「#f」]

%x使用`方法執行一段shell指令碼並返回標準輸出內容.

複製** **如下:

%x(echo foo:#)

=> 「foo:foo\n」

%r語法近似於%q, 用於正規表示式.

複製** **如下:

%r(/home/#)

=> 「/\/home\/foo/」

%s用於表示symbol, 但是不會對其中表示式等內容進行轉化

複製** **如下:

%s(foo)

=> :foo

%s(foo bar)

=> :」foo bar」

%s(# bar)

=> :」# bar」

%iruby 2.0 之後引入的語法, 用於生成乙個symbol陣列

2.0.0p247 :014 > %i(a b c)

=> [:a, :b, :c]

附:另一篇

% 用於建立乙個使用雙引號括起來的字串

%q 用於建立乙個使用雙引號括起來的字串

%q!some string of 「characters」! <==> 」 some string of /」characters/」 「

%q 用於建立乙個使用單引號括起來的字串

%q!some string of 「characters」! <==> 『some string of characters』

%r 用於建立乙個正規表示式字面值

%r <==> ///usr//bin///

%w 用於將乙個字串以空白字元切分成乙個字串陣列,進行較少替換

%w 用於將乙個字串以空白字元切分成乙個字串陣列,進行較多替換

%w(north south east west) <==> [「north」, 「south」, 「east」, 「west」]

%s 用於生成乙個符號物件

%x 用於執行string所代表的命令

%x <==>ls /usr/local

ps:上面幾個%表示法中用{}擴住了string,其實這個{} 只是一種分割符,可以換成別的字元,比如(),那麼%表示法就是%(string),當然還可以是別的字元,對於非括號型別的分割符,左右兩邊要相同, 如%!string!

下面我對這些表示法簡單舉幾個例子:

%用於建立乙個使用雙引號括起來的字串

這個表示法與%q完全一樣,這邊直接句個例子看結果:

複製** **如下:

result = %

puts 「result is: #, type is:#」

結果: result is: hello, type is:string

%q用於建立乙個使用雙引號括起來的字串

%q用於建立乙個使用單引號括起來的字串

從說明中可以看出這兩個表示法的區別就是乙個使用雙引號,乙個使用單引號。使用雙引號的字串會對字串中的變數做較多替換,而單引號則做較少的替換,具 體看例子。先看%q:

複製** **如下:

world = 「world」

result = %q}

puts 「result is: #, type is:#」

結果: result is: hello world, type is:string

換成%q:

複製** **如下:

world = 「world」

result = %q}

puts 「result is: #, type is:#」

結果: result is: hello #, type is:string

從上面的結果可以看出,較少替換的情況下,#被解析成了字串,而不會去計算這個變數中的值。

%r用於建立乙個正規表示式字面值

就像使用/reg/方式一樣,看**:

複製** **如下:

result = %r

puts result =~ 「hello world」

puts 「result is: #, type is:#」

結果: 6 result is: (?-mix:world), type is:regexp

可以看出,world從第6個字元開始匹配

%w用於將乙個字串以空白字元切分成乙個字串陣列,進行較少替換

%w用於將乙個字串以空白字元切分成乙個字串陣列,進行較多替換

這兩個應該是大家見過最多的,用這個方式構造陣列,可以省下一些逗號,ruby真 是會慣壞大家,以後大家都不用標點符號了。

同樣給乙個簡單的例子:

複製** **如下:

result = %w

puts 「result is: #, type is:#, length is:#」

結果: result is: helloworld, type is:array, length is:2

%s用於生成乙個符號物件

直接先上**:

複製** **如下:

result = %s

puts 「result is: #, type is:#」

sym = :」hello world」

puts 「the two symbol is the same: #」

結果:

result is: hello world, type is:symbol

the two symbol is the same: true

可以看出,這兩中方式生成的symbol物件完全一樣

%x用於執行string所代表的命令

比如:

%x可以啟動windows下的記事本,這裡我就不列結果了(那是乙個大家熟悉的視窗)。

Ruby 中一些百分號( )的用法小結

q用於替代雙引號的字串.當你需要在字串裡放入很多引號時候,可以直接用下面方法而不需要在引號前逐個新增反斜槓 複製 如下 q joe said frank said joe said frank said hello 也可用其他非數字字母的符號或成對的符號代替,諸如 等.以下寫法全部與上面等效 複製 ...

Ruby中 的用法 百分號的用法

用於建立乙個使用雙引號括起來的字串 q用於建立乙個使用雙引號括起來的字串 q some string of characters some string of characters q用於建立乙個使用單引號括起來的字串 q some string of characters some string ...

特殊用法 百分號 井號

為了完整起見,我這裡再用一些例子加以說明 的一些特異功能 假設我們定義了乙個變數為 file dir1 dir2 dir3 my.file.txt 我們可以用 分別替換獲得不同的值 拿掉第一條 及其左邊的字串 dir1 dir2 dir3 my.file.txt 拿掉最後一條 及其左邊的字串 my....