2011-11-02 15 views
7

sto cercando di capire lo script presentato su this site:Qual è il significato del segno percentuale + operatore tubo in Ruby, come in "% |"?

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

Ancora più importante, la parte in cui la funzione terminal_script_filepath inizia con:

%| … 
… | 

... e dove è "analizzato" a:

{ |io| io << terminal_script_filepath } 

Quali concetti di rubino sono usati qui?

so che open() con un tubo mi aiuta in pasto ingresso al STDIN di un processo, ma come si fa l'ingresso ottenere da terminal_script_filepath a io? Conosco anche lo basic % operations with strings, come %w, ma cosa fa il tubo qui?

+2

+1 per googleable 'percent' 'pipe' –

risposta

10

È una stringa. In ruby, puoi definire stringhe in vari modi. Le virgolette singole o doppie sono le più comuni,% s è un'altra. Puoi anche definire stringhe con qualsiasi delimitatore, come usato in questo script. Ad esempio %^Is also a string^ o %$Also a string$. Devi solo assicurarti di non usare quei caratteri all'interno della stringa.

Il << in questo caso viene utilizzato come operazione di concatenazione, aggiungendo la stringa a un file o, in questo caso, una pipe che ascolta AppleScript.

+0

Fai attenzione dopo ** Ruby 2.0 ** dove i modificatori possono modificare l'interpolazione, ad es. '% I []' _ Array interpolato di simboli, separati da spazi bianchi (dopo Ruby 2.0) _ –

4

Questo è un altro esempio di stringa letterale:

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

È possibile utilizzare qualsiasi singolo carattere non alfanumerico come delimitatore, così:

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

Dove è documentato? – slhck

+4

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals o "Il linguaggio del linguaggio di programmazione Ruby" di Flanagan e Matsumoto – WarHog

+0

@WarHog E il collegamento direttamente alla sezione: http://en.wikibooks.org /wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation (Vorrei modificare il tuo commento se potessi;) –

Problemi correlati