2011-11-02 36 views
7

Tôi đang cố gắng để hiểu được những kịch bản được trình bày trên this site:Ý nghĩa của toán tử dấu + phần trăm trong Ruby, như trong "% |" là gì?

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

Quan trọng nhất là phần mà các chức năng terminal_script_filepath bắt đầu bằng:

%| … 
… | 

... và nơi mà nó là "phân tích" trong:

{ |io| io << terminal_script_filepath } 

Khái niệm nào về Ruby được sử dụng ở đây?

Tôi biết rằng open() có đường ống giúp tôi nạp dữ liệu vào STDIN của quy trình, nhưng cách nhập vào từ terminal_script_filepath đến io? Tôi cũng biết số basic % operations with strings, chẳng hạn như %w, nhưng đường ống làm gì ở đây?

+2

+1 cho 'phần trăm' ống có thể googleable ' –

Trả lời

10

Đó là một chuỗi. Trong ruby, bạn có thể định nghĩa các chuỗi theo cách có thể. Dấu ngoặc kép đơn hoặc kép là phổ biến nhất,% s là dấu ngoặc kép khác. Bạn cũng có thể xác định các chuỗi với bất kỳ dấu tách nào, như được sử dụng trong tập lệnh này. Ví dụ: %^Is also a string^ hoặc %$Also a string$. Bạn chỉ cần đảm bảo không sử dụng các ký tự đó bên trong chuỗi.

<< trong trường hợp này đang được sử dụng làm thao tác nối, nối chuỗi vào tệp hoặc trong trường hợp này, một đường ống nghe tới AppleScript.

+0

Hãy cẩn thận sau ** Ruby 2.0 **, nơi các công cụ sửa đổi có thể thay đổi nội suy, ví dụ: '% I []' _Interpolated Mảng biểu tượng, cách nhau bởi khoảng trắng (sau Ruby 2.0) _ –

4

Đây là một ví dụ về chuỗi chữ:

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

Bạn có thể sử dụng bất kỳ ký tự phi-alpha-số duy nhất như là dấu phân cách, như vậy:

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

Tài liệu này được viết ở đâu? – slhck

+4

http://vi.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals hoặc cuốn sách 'Ngôn ngữ lập trình Ruby' của Flanagan và Matsumoto – WarHog

+0

@WarHog Và liên kết trực tiếp đến phần: http://en.wikibooks.org /wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation (Tôi sẽ chỉnh sửa bình luận của bạn nếu tôi có thể;) –

Các vấn đề liên quan