2011-11-02 6 views
7

Próbuję zrozumieć scenariusz przedstawiony na this site:Jakie jest znaczenie znaku procentu + operator potoku w Rubim, jak w "% |"?

#!/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 } 

najważniejsze, udział w których funkcja terminal_script_filepath zaczyna:

%| … 
… | 

... a gdzie jest „analizowany” w:

{ |io| io << terminal_script_filepath } 

Które koncepcje Ruby są tutaj stosowane?

wiem, że open() z rurą pomaga mi karmić wejście do STDIN procesu, ale w jaki sposób dostać się z terminal_script_filepath wejście do io? Znam też basic % operations with strings, jak %w, ale co tu robi rura?

+2

+1 dla "procentowej" wersji "google" z możliwością zalogowania się –

Odpowiedz

10

Jest to łańcuch. W Ruby możesz definiować ciągi znaków w sposób majowy. Pojedyncze lub podwójne cudzysłowy są najczęstsze,% s to drugie. Można również zdefiniować ciągi znaków z ogranicznikiem, tak jak jest to używane w tym skrypcie. Na przykład %^Is also a string^ lub %$Also a string$. Musisz tylko upewnić się, że nie używasz tych znaków w ciągu znaków.

W tym przypadku << jest używany jako operacja konkatenacji, dołączając ciąg do pliku lub w tym przypadku do rury, która słucha AppleScript.

+0

Zachowaj ostrożność po ** Ruby 2.0 **, gdzie modyfikatory mogą zmienić interpolację, np. '% I []' _Interpolated Tablica symboli, oddzielona białymi znakami (po Ruby 2.0) _ –

4

Jest to kolejny przykład sznurka dosłowny:

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

Można stosować dowolny pojedynczy znak zakaz alfanumerycznej jako separatora, tak:

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

Gdzie jest to udokumentowane? – slhck

+4

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals lub książka "The Ruby programming language" autorstwa Flanagana i Matsumoto – WarHog

+0

@WarHog I link bezpośrednio do sekcji: http://en.wikibooks.org /wiki/Ruby_Programming/Syntax/Literals#The_.25Notation (chciałbym edytować komentarz, jeśli mógłbym;) –

Powiązane problemy