2011-11-02 10 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()は私がプロセスのSTDINへの入力を養うのに役立ちますが、どのように入力がioterminal_script_filepathから取得しないことを知っていますか?私は%wのようにbasic % operations with stringsも知っていますが、ここでパイプは何をしていますか?

+2

+1 googleable 'パーセント' 'パイプ' –

答えて

10

それは文字列です。ルビーでは、文字列を多分に定義することができます。一重引用符または二重引用符が最も一般的です。%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

@WarHogそしてセクションへのリンク:http://en.wikibooks.org /wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation(できればあなたのコメントを編集します) –

関連する問題