อาร์เรย์ Ruby:% w กับ% W


152

อะไรคือความแตกต่าง?


18
"% w" คือการตอบโต้ปกติของฉันต่อผู้ที่รู้สึกโอ้อวดเกี่ยวกับการอ่านของ Ruby ทำงานได้ทุกครั้ง
Craig Stuntz

ตอนนี้คุณมีการตอบสนองที่ดียิ่งขึ้น :-)
errata

6
ในฐานะที่เป็นข้อความด้านข้างที่ไม่เกี่ยวข้อง URL สำหรับคำถามนี้ทำให้ฉันสับสนในขณะที่หน้ากำลังโหลด
คดีฟ้องร้องกองทุนโมนิก้า

คำตอบ:


233

% น้ำหนักคำพูดเช่นราคาเดียว''(ไม่มีการแก้ไขตัวแปรน้อยลำดับหนี) ในขณะ% W ""คำพูดเช่นคำพูดคู่

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}"]

ตัวอย่างของคุณแสดงเครื่องหมายคำพูดคู่สำหรับ% w ด้วยเช่นกัน ถูกต้องหรือไม่
Foton

ใช่. เมื่อพิมพ์เอาต์พุต Ruby จะใช้เครื่องหมายคำพูดคู่และ Escape อักขระเช่น#กัน '#{foo}'และ"\#{foo}"ให้คุณสายเดียวกันซึ่งคุณสามารถตรวจสอบกับใน'#{foo}' == "\#{foo}" irb
Brian Campbell

มันสับสนเล็กน้อยในการพบกันครั้งแรก แต่ขอบคุณสำหรับคำอธิบาย
Foton

29

แอปพลิเคชันที่ฉันพบสำหรับ% W เทียบกับ% w:

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

12
แม้ว่าในกรณีนี้เป็นเรื่องง่ายกว่าที่จะทำgreetings = %w(hi hello how\ do\ you\ do)
dinjas


11

แม้ว่าจะมีการโพสต์เก่าคำถามยังคงเกิดขึ้นและคำตอบก็ไม่ชัดเจนสำหรับฉัน ดังนั้นนี่คือความคิดของฉัน

W% และ% W เป็นตัวอย่างของการป้อนข้อมูลทั่วไปคั่นประเภทที่เกี่ยวข้องกับอาร์เรย์ มีประเภทอื่น ๆ ที่รวมถึง% q,% Q,% r,% x และ% i

ความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็กคือมันทำให้เราสามารถเข้าถึงคุณลักษณะของเครื่องหมายคำพูดเดี่ยวและคู่ได้ ด้วยเครื่องหมายคำพูดเดี่ยวและตัวพิมพ์เล็ก% w เราไม่มีการแก้ไขโค้ด (เช่น # {someCode}) และช่วงอักขระ จำกัด การหลบหนีที่ใช้งานได้ (เช่น \, \ n) ด้วยเครื่องหมายคำพูดคู่และตัวพิมพ์ใหญ่% W ที่เราทำสามารถเข้าถึงคุณลักษณะเหล่านี้

ตัวคั่นที่ใช้สามารถเป็นอักขระใด ๆ ไม่ใช่แค่วงเล็บเปิด เล่นกับตัวอย่างด้านบนเพื่อดูว่ามีผล

สำหรับการเขียนแบบเต็มโดยมีตัวอย่างของ% w และรายการแบบเต็มให้ใช้อักขระยกเว้นและตัวคั่น - ดูที่: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

เครื่องหมาย


1
นั่นเป็นบทความที่ดี ฉันไม่ได้ตระหนักว่าคุณสามารถสร้างสตริงหรือสิ่งอื่น ๆ ในลักษณะเดียวกันและตัวละครที่ล้อมรอบอาจเป็นสิ่งที่คุณต้องการ ตัวอย่างเช่น%w&readable af&
Dex


1

%Wใช้สำหรับองค์ประกอบอาร์เรย์%Qสองตัวเช่น

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

%w%qถูกนำมาใช้สำหรับองค์ประกอบอาร์เรย์เดียวที่ยกมาเช่น

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

0
array = %w(a b c d) 

เหมือนกับ

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

%w เป็นสัญลักษณ์ทางลัดสำหรับเครื่องหมายคำพูดของสตริง!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.