Mảng Ruby:% w so với% W


152

Sự khác biệt là gì?


18
"% w" là câu trả lời thông thường của tôi đối với những người hơi quá tự phụ về khả năng đọc của Ruby. Hoạt động mọi lúc.
Craig Stuntz

bây giờ bạn có phản hồi thậm chí tốt hơn :-)
errata

6
Là một lưu ý phụ không liên quan, URL cho câu hỏi này làm tôi bối rối trong một lúc trong khi trang đang tải.
Vụ kiện của Quỹ Monica

Câu trả lời:


233

% w trích dẫn như dấu ngoặc đơn '' (không có nội suy biến, ít chuỗi thoát), trong khi% W trích dẫn 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}"]

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

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

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

29

Một ứng dụng tôi đã tìm thấy cho% W so với% w:

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

12
Mặc dù trong trường hợp này, nó chỉ dễ thực hiện hơngreetings = %w(hi hello how\ do\ you\ do)
dinjas

21

% W thực hiện thay thế trích dẫn kép bình thường. % w thì không.


11

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

% w và% W là ví dụ về các loại Đầu vào được phân tách chung , 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 trích dẫn đơn và kép. Với dấu ngoặc đơn và chữ thường% w, chúng tôi không có phép nội suy mã (ví dụ # {someCode}) và một phạm vi ký tự thoát giới hạn hoạt động (ví dụ \, \ n). Với dấu ngoặc kép và chữ hoa% W chúng tôi làm có quyền truy cập vào các tính năng này.

Dấu phân cách được sử dụng có thể là bất kỳ ký tự nào, không chỉ là 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.

Để viết đầy đủ với các ví dụ về% w và danh sách đầy đủ, các ký tự thoát và dấu phân cách - hãy xem: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-reveal .html

dấu


1
Đó là một bài viết tốt. Tôi không nhận ra bạn có thể tạo chuỗi hoặc những thứ khác theo cùng một cách và các ký tự kèm theo có thể là bất cứ điều gì bạn muốn. Ví dụ:%w&readable af&
Dex


1

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

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

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

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

0
array = %w(a b c d) 

Giống như

array = ["a", "b", "c", "d"]

%w là một biểu tượng cắt ngắn cho dấu ngoặc kép cho chuỗi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.