Tôi đang xem tài liệu cho FileUtils. Tôi bị nhầm lẫn bởi dòng sau:% w (mảng) có nghĩa là gì?
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Ý nghĩa %w
là gì? Bạn có thể chỉ cho tôi tài liệu hướng dẫn không?
Tôi đang xem tài liệu cho FileUtils. Tôi bị nhầm lẫn bởi dòng sau:% w (mảng) có nghĩa là gì?
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Ý nghĩa %w
là gì? Bạn có thể chỉ cho tôi tài liệu hướng dẫn không?
%w(foo bar)
là phím tắt cho ["foo", "bar"]
. Nghĩa là một ký hiệu để viết một chuỗi các chuỗi được phân cách bằng dấu cách thay vì dấu phẩy và không có dấu ngoặc kép xung quanh chúng. Bạn có thể tìm thấy một danh sách các cách viết chữ trong zenspider's quickref.
%W
and %w
cho phép bạn tạo một Chuỗi các chuỗi mà không cần sử dụng dấu ngoặc kép và dấu phẩy.
Đối với sự khác biệt giữa% W và% w, hãy xem http://stackoverflow.com/questions/690794/ruby-arrays -w-vs-w –
Tôi nghĩ về %w()
là một "mảng từ" - các phần tử được phân tách bằng dấu cách.
Có% literals khác:
%r()
là một cách khác để viết một biểu thức chính quy.%q()
là một cách khác để viết một chuỗi đơn trích dẫn (và có thể là nhiều dòng, đó là hữu ích)%Q()
đưa ra một chuỗi dụng dấu ngoặc kép%x()
là một lệnh shell%i()
đưa ra một mảng các biểu tượng (Ruby> = 2.0.0)%s()
biến foo
thành một biểu tượng (:foo
)Tôi không biết bất kỳ người khác, nhưng có thể có một số rình rập xung quanh trong đó ...
Như của Ruby 2.0.0 bạn cũng có thể sử dụng '% i()' để tạo ra một mảng các ký hiệu. –
Như của Lisp 1 (~ 1962) bạn có thể sử dụng '(a b c)' để tạo ra một danh sách các biểu tượng. – Kaz
Ngoài ra còn có '%()' (hoặc '% []' hoặc '% {}') cung cấp chuỗi kép được trích dẫn và thoát khỏi dấu ngoặc kép, như '% Q()'. Ví dụ. '% (" tên người gửi "<[email protected]>) # =>" \ "tên người gửi \" <[email protected]> "' – Dennis
Ngoài ra còn có %s
cho phép bạn tạo ra bất kỳ biểu tượng, ví dụ:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
Kể từ của Ruby 2.0 .0 bạn cũng có:
%i(a b c) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
Mặc dù nó là 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 phiên bản 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 dấu nháy đơ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ã (#{someCode}
) và một phạm vi giới hạn ký tự thoát hoạt động (\\
, \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 "Ruby - %w vs %W – secrets revealed!"
Trích từ tài liệu cho Strings Percent tại http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings:
Bên cạnh% (...) tạo String,% có thể tạo các loại đối tượng khác. Cũng giống như các chuỗi, một chữ cái hoa cho phép nội suy và ký tự thoát trong khi một chữ thường sẽ vô hiệu hóa chúng.
Đây là những loại dây phần trăm trong ruby:
...
% w: Array của Strings
Xin cảm ơn! Tôi đã bắt đầu nghĩ rằng nó không tồn tại. Các liên kết rubydoc do người khác cung cấp bị hỏng. – Gerry
Tài liệu không dành cho những tài liệu này không được bao gồm trong RubyDocs trong một thời gian dài. –
Thay vì %w()
chúng ta nên sử dụng %w[]
Theo phong cách của Ruby hướng dẫn:
Ưu tiên% w với cú pháp mảng chữ khi bạn cần một mảng từ (chuỗi không trống s không có dấu cách và các ký tự đặc biệt trong đó). Chỉ áp dụng quy tắc này cho các mảng có hai hoặc nhiều phần tử.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
Sử dụng niềng răng thích hợp nhất cho các loại chữ% khác nhau.
[]
cho mảng chữ (%w, %i, %W, %I
) vì nó được căn chỉnh với các mảng chuẩn của mảng.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Để đọc thêm here.
Tôi đã được cung cấp một loạt các cột từ bảng tính CSV có tên đầy đủ của người dùng và tôi cần giữ định dạng, với khoảng trắng. Cách đơn giản nhất tôi tìm thấy để có được chúng trong khi đang sử dụng ruby đã làm:
names = %(Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
này nhấn mạnh rằng %()
tạo ra một chuỗi như "Porter Smith\nJimmyJones\nRonald Jackson"
và để có được mảng bạn split
chuỗi trên "\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Vì vậy, để trả lời câu hỏi gốc của OP quá, họ có thể đã viết %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
nếu xảy ra space
khi bạn muốn space
tồn tại trong đầu ra mảng cuối cùng.
Ngoài ra, dấu ngoặc đơn có thể gần như bất kỳ ký tự nào khác như dấu ngoặc vuông% w [...], dấu ngoặc nhọn% w {...} hoặc thậm chí là dấu chấm than% w! ...!. Tất cả những điều này có cùng một hành vi (trả về một mảng). – ryanb
Cách đơn giản nhất để ghi nhớ ý nghĩa của cụm từ này là "mảng cách nhau (w) được phân tách". – Julik
Xem "Đầu vào được phân định chung" tại đây http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html –