2009-03-27 4 views
129

Sự khác biệt là gì?Mảng Ruby:% w so với% W

+13

"% w" là cách trả lời thông thường của tôi đối với những người hơi hoang mang về khả năng đọc của Ruby. Hoạt động mọi lúc. –

+0

bây giờ bạn có một phản ứng tốt hơn :-) – errata

+4

Là một lưu ý không liên quan, URL cho câu hỏi này làm tôi bối rối trong khi trang đang tải. –

Trả lời

205

% dấu ngoặc kép như dấu ngoặc đơn '' (không có phép nội suy biến, chuỗi thoát ít hơn), trong khi dấu ngoặc kép% W như dấu ngoặc kép "".

irb(main):001:0> foo="hello" 
=> "hello" 
irb(main):002:0> %W(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "hello"] 
irb(main):003:0> %w(foo bar baz #{foo}) 
=> ["foo", "bar", "baz", "\#{foo}"] 
+0

Ví dụ của bạn hiển thị dấu ngoặc kép cho% w quá. Nó có đúng không? – Foton

+0

Có. Khi in ra, Ruby luôn sử dụng dấu ngoặc kép và thoát các ký tự như '#'. ''# {foo}'' và '" \ # {foo} "' cung cấp cho bạn cùng một chuỗi, mà bạn có thể xác minh bằng ''# {foo}' ==" \ # {foo} "' trong 'irb' . –

+0

Hơi khó hiểu khi nhìn thấy lần đầu tiên, nhưng cảm ơn bạn đã giải thích. – Foton

19

% W thực hiện các thay thế báo giá kép bình thường. % w thì không.

26

Đơn Tôi đã tìm thấy cho% W vs% w:

greetings = %W(hi hello #{"how do you do"}) 
# => ["hi", "hello", "how do you do"] 
+0

Neat hack, cảm ơn! – akuhn

+9

Mặc dù trong trường hợp này, đó là prob dễ dàng hơn để chỉ làm 'greetings =% w (hi hello how \ do \ you \ do)' – dinjas

10

Mặc dù một bài cũ, câu hỏi tiếp tục mọc lên và những câu trả lời không phải lúc nào dường như rõ ràng với tôi. Vì vậy, đây là suy nghĩ của tôi.

% w và% W là ví dụ về Đầu vào được phân tách chung loại, có liên quan đến Mảng. Có các loại khác bao gồm% q,% Q,% r,% x và% i.

Sự khác biệt giữa chữ hoa và chữ thường là nó cho phép chúng ta truy cập vào các tính năng của báo giá đơn và kép. Với dấu nháy đơn và chữ thường% w, chúng tôi không có nội suy mã (ví dụ: # {someCode}) và phạm vi ký tự thoát hạn chế hoạt động (ví dụ: \, \ n). Với dấu ngoặc kép và chữ hoa% W, chúng tôi do có quyền truy cập vào các tính năng này.

Dấu phân tách được sử dụng có thể là bất kỳ ký tự nào, không chỉ dấu ngoặc đơn mở. Chơi với các ví dụ trên để thấy rằng có hiệu lực.

Đối với một đầy đủ viết lên những ví dụ về% w và danh sách đầy đủ, thoát khỏi nhân vật và delimiters - có một cái nhìn tại địa chỉ: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed.html

Đánh dấu

1

%W được sử dụng cho các phần tử mảng được trích dẫn kép như %Q, ví dụ:

foo = "!" 
%W{hello world #{foo}} # => ["hello", "world", "!"] 

%w được sử dụng cho các phần tử mảng đơn được trích dẫn như %q.

%w(hello world #{foo}) 
# => ["hello","world", "\#{foo}"]