2011-11-02 34 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(如果可以的话,我会编辑你的评论;) –