Что означает оператор знак% + труба в Ruby, как в «% |»? - PullRequest
8 голосов
/ 02 ноября 2011

Я пытаюсь понять скрипт, представленный на этом сайте :

#!/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 процесса, но как входные данные получают от terminal_script_filepath до io?Я также знаю basic % операции со строками , например %w, но что здесь делает труба?

Ответы [ 2 ]

11 голосов
/ 02 ноября 2011

Это строка.В ruby ​​вы можете определять строки разными способами.Одинарные или двойные кавычки являются наиболее распространенными,% s - другое.Вы также можете определить строки с любым разделителем, как используется в этом сценарии.Например %^Is also a string^ или %$Also a string$.Вы просто должны убедиться, что не используете эти символы внутри строки.

<< в этом случае используется как операция конкатенации, добавления строки в файл или, в данном случае, каналакоторый слушает AppleScript.

4 голосов
/ 02 ноября 2011

Это еще один пример строкового литерала:

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

В качестве разделителя можно использовать любой отдельный не буквенно-цифровой символ, например:

var = %^foobar^
var.class # => String
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...