我正在努力理解这个网站上呈现的脚本:
#!/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
?我也知道基本的%
操作与字符串,像%w
,但这里的管道做什么?
字符串。在ruby中,可以用多种方式定义字符串。单引号或双引号是最常见的,%s是另一个。您还可以定义带有任何分隔符的字符串,就像这个脚本中使用的那样。例如%^Is also a string^
、%$Also a string$
。你只需要确保不要在字符串中使用这些字符。
在本例中,<<
被用作连接操作,将字符串附加到文件中,或者在本例中,是侦听AppleScript的管道。
这是另一个字符串字面值的例子:
var = %|foobar|
var.class # => String
可以使用任何一个非字母数字字符作为分隔符,如下所示:
var = %^foobar^
var.class # => String