2011-11-02 35 views
7

我試圖理解呈現在this site腳本:Ruby中的百分號+管道運算符的含義如「%|」中的含義?

#!/usr/bin/env ruby 

require ENV['TM_SUPPORT_PATH'] + '/lib/escape.rb' 

def terminal_script_filepath 
    %|tell application "Terminal" 
     activate 
     do script "jsc -i #{e_as(e_sh(ENV['TM_FILEPATH']))}" 
    end tell| 
end 

open("|osascript", "w") { |io| io << terminal_script_filepath } 

最重要的是,部分在功能terminal_script_filepath開頭:

%| … 
… | 

...以及它在「分析」:

{ |io| io << terminal_script_filepath } 

這裏使用了哪些Ruby的概念?

我知道open()與管道幫我喂輸入到程序的標準輸入,但如何輸入從terminal_script_filepathio?我也知道basic % operations with strings,如%w,但管道在這裏做什麼?

+2

+1對於googleable「百分比」'管道' –

回答

10

它是一個字符串。在ruby中,你可以用多種方式定義字符串。單引號或雙引號是最常用的,%s是另一個。您也可以使用任何分隔符定義字符串,如在此腳本中所使用的。例如%^Is also a string^%$Also a string$。你只需要確保不要在字符串中使用這些字符。

在這種情況下,<<被用作一個串聯操作,將字符串附加到文件中,或者在這種情況下是一個監聽AppleScript的管道。

+0

在修改器可以改變插值的** Ruby 2.0 **之後,請小心。 '%I []'_Interpolated由空格分隔的符號數組(在Ruby 2.0之後)_ –

4

這是文字串的另一個例子:

var = %|foobar| 
var.class # => String 

可以使用任何單一非字母數字字符作爲分隔符,像這樣:

var = %^foobar^ 
var.class # => String 
+0

這是在哪裏記錄的? – slhck

+4

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals或由Flanagan和Matsumoto編寫的'Ruby編程語言'一書 – WarHog

+0

@WhHog並直接鏈接到該部分:http://en.wikibooks.org /wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation(如果可以的話,我會編輯你的評論;) –