Ruby中百分号+管道运算符的含义是什么,如“%|”?

时间:2011-11-02 12:22:44

标签: ruby syntax

我正在尝试理解this site上提供的脚本:

#!/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 % operations with strings,如%w,但管道在这做什么?

2 个答案:

答案 0 :(得分:11)

这是一个字符串。在ruby中,您可以通过may方式定义字符串。单引号或双引号是最常见的,%s是另一种。您还可以使用此脚本中使用的任何分隔符定义字符串。例如%^Is also a string^%$Also a string$。您只需确保不在字符串中使用这些字符。

在这种情况下,<<被用作连接操作,将字符串附加到文件,或者在这种情况下,是一个侦听AppleScript的管道。

答案 1 :(得分:4)

这是字符串文字的另一个例子:

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

您可以使用任何单个非字母数字字符作为分隔符,如下所示:

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