2012-06-05 27 views
5

Giả sử tôi muốn tạo một mảng với ["one", "two", nil], có thể làm như vậy bằng cách sử dụng cú pháp %w[] viết tắt? Rõ ràng điều này không làm việc:Có thể tạo giá trị nil trong mảng bằng cách sử dụng ký hiệu% w [] không?

array = %w[one two nil] 
=> ["one", "two", "nil"] 
array[2].nil? 
=> false 

của Ruby 1.9.3

+0

Xem thêm http://stackoverflow.com/questions/12979928/create-array-with-empty-string-using-w (ở đó kết quả chứa một chuỗi trống - vì vậy đây là một tình huống tương tự, không giống nhau) . Một câu hỏi tương tự khác: http://stackoverflow.com/questions/4064062/space-in-the-ruby-array-by-w – knut

Trả lời

4

số Toàn bộ mục đích mà cú pháp tiện lợi là để tránh đặt dấu ngoặc kép quanh xâu, và dấu phẩy phân cách.

+0

Câu trả lời của bạn phản ánh * tinh thần * của hàm tạo% w [], nhưng đọc nhiều hơn của câu hỏi có thể là "Có thể tạo các giá trị nil khi sử dụng hàm tạo% w [] không?" Trong trường hợp đó, câu trả lời rõ ràng là có. –

+0

@CodeGnome Trên thực tế, câu hỏi nêu rõ _using_ phương thức khởi tạo '% w []'. –

+0

@dunsmoreb Cảm ơn sự hỗ trợ. – Anil

0

Chỉ gián tiếp. Bạn có thể tạo mảng của bạn, và sau đó chuyển đổi chuỗi "nil" một con số không thực tế với mảng # thu thập:

array = %w[one two nil].collect { |v| v == 'nil' ? nil : v } 
1

Bạn có thể splat mảng %w[] và đặt nil sau:

>> array = [ *%w[one two], nil, *%w[and some more words] ] 
=> ["one", "two", nil, "and", "some", "more", "words"] 

Nhưng có thể ồn ào hơn là chỉ trích dẫn các chuỗi riêng lẻ; OTOH, tiếng ồn thêm cho thấy có điều gì đó kỳ lạ đang diễn ra để người đọc sẽ được khuyến khích nhìn gần hơn.

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