ฉันกำลังดูเอกสารสำหรับ FileUtils
ฉันสับสนโดยบรรทัดต่อไปนี้:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
อะไร%w
หมายถึง? คุณช่วยชี้ทางเอกสารให้ฉันได้ไหม?
ฉันกำลังดูเอกสารสำหรับ FileUtils
ฉันสับสนโดยบรรทัดต่อไปนี้:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
อะไร%w
หมายถึง? คุณช่วยชี้ทางเอกสารให้ฉันได้ไหม?
คำตอบ:
%w(foo bar)
["foo", "bar"]
เป็นทางลัดสำหรับ หมายความว่ามันเป็นสัญลักษณ์ในการเขียนอาร์เรย์ของสตริงคั่นด้วยช่องว่างแทนเครื่องหมายจุลภาคและไม่มีเครื่องหมายคำพูดล้อมรอบ คุณสามารถค้นหารายการของวิธีการเขียนตัวอักษรในQuickRef zenspider ของ
%w(ab\ c def) # => ["ab c", "def"]
ฉันคิดว่า%w()
เป็น "อาร์เรย์คำ" - องค์ประกอบถูกคั่นด้วยช่องว่างและจะส่งกลับอาร์เรย์ของสตริง
มี% ตัวอักษรอื่น ๆ :
%r()
เป็นอีกวิธีในการเขียนนิพจน์ทั่วไป%q()
เป็นอีกวิธีในการเขียนสตริงที่มีเครื่องหมายคำพูดเดียว (และสามารถเป็นหลายบรรทัดซึ่งมีประโยชน์)%Q()
ให้สตริงที่ยกมาสองครั้ง%x()
เป็นคำสั่งเชลล์%i()
ให้อาร์เรย์ของสัญลักษณ์ (Ruby> = 2.0.0)%s()
กลายfoo
เป็นสัญลักษณ์ ( :foo
)ฉันไม่รู้จักคนอื่น แต่อาจมีบางคนแอบซ่อนอยู่ในนั้น ...
%i()
เพื่อสร้างอาร์เรย์ของสัญลักษณ์
%()
(หรือ%[]
หรือ%{}
) %Q()
ซึ่งจะช่วยให้สายยกคู่และหนีราคาคู่เหมือน เช่น%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
นอกจากนี้ยัง%s
ช่วยให้คุณสร้างสัญลักษณ์ใด ๆ ตัวอย่างเช่น:
%s|some words| #Same as :'some words'
%s[other words] #Same as :'other words'
%s_last example_ #Same as :'last example'
ตั้งแต่ Ruby 2.0.0 คุณก็มี:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%W
และ%w
อนุญาตให้คุณสร้างอาร์เรย์ของสตริงโดยไม่ต้องใช้เครื่องหมายคำพูดและเครื่องหมายจุลภาค
แม้ว่าจะเป็นการโพสต์เก่า แต่คำถามก็ยังคงเกิดขึ้นและคำตอบก็ไม่ชัดเจนสำหรับฉันดังนั้นนี่คือความคิดของฉัน:
%w
และ%W
เป็นตัวอย่างของประเภทอินพุตที่คั่นด้วยทั่วไปที่เกี่ยวข้องกับอาร์เรย์ มีชนิดอื่น ๆ ที่มีอยู่%q
, %Q
, %r
, และ%x
%i
ความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็กคือมันทำให้เราสามารถเข้าถึงคุณลักษณะของเครื่องหมายคำพูดเดี่ยวและคู่ ด้วยเครื่องหมายคำพูดเดี่ยวและ (ตัวพิมพ์เล็ก) %w
เราไม่มีการแก้ไขรหัส ( #{someCode}
) และช่วงอักขระ จำกัด ที่ใช้งานได้ ( \\
, \n
) ด้วยเครื่องหมายคำพูดคู่และ (ตัวพิมพ์ใหญ่) %W
เราจะสามารถเข้าถึงคุณลักษณะเหล่านี้ได้
ตัวคั่นที่ใช้สามารถเป็นอักขระใด ๆ ไม่ใช่แค่วงเล็บเปิด เล่นกับตัวอย่างด้านบนเพื่อดูว่ามีผล
สำหรับการเขียนแบบเต็มโดยมีตัวอย่างของ%w
และรายชื่อตัวละครยกเว้นและตัวคั่นดูที่ " Ruby -% w เทียบกับ% W - เปิดเผยความลับ! "
แทนที่จะเป็น%w()
เราควรใช้%w[]
ตามคู่มือสไตล์ทับทิม:
ต้องการ% w ไปยังไวยากรณ์อาร์เรย์ตัวอักษรเมื่อคุณต้องการอาร์เรย์ของคำ (สตริงที่ไม่ว่างโดยไม่มีช่องว่างและอักขระพิเศษในพวกเขา) ใช้กฎนี้กับอาร์เรย์ที่มีองค์ประกอบสองรายการขึ้นไปเท่านั้น
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
ใช้วงเล็บปีกกาที่เหมาะสมที่สุดสำหรับตัวอักษรเปอร์เซนต์ชนิดต่างๆ
[]
สำหรับตัวอักษรอาร์เรย์ ( %w, %i, %W, %I
) ตามที่สอดคล้องกับตัวอักษรอาร์เรย์มาตรฐาน
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
คัดลอกมาจากเอกสารสำหรับ Percent Strings ที่http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
นอกจาก% (... ) ซึ่งสร้างสตริงแล้ว% อาจสร้างวัตถุประเภทอื่น เช่นเดียวกับสตริงตัวอักษรตัวพิมพ์ใหญ่อนุญาตให้มีการแก้ไขและหนีอักขระขณะที่อักษรตัวพิมพ์เล็กปิดการใช้งาน
นี่คือประเภทของสตริงเปอร์เซ็นต์ในทับทิม:
...
% w : Array of Strings
ฉันได้รับคอลัมน์จำนวนมากจากสเปรดชีต CSV ชื่อเต็มของผู้ใช้และฉันจำเป็นต้องจัดรูปแบบโดยเว้นวรรค วิธีที่ง่ายที่สุดที่ฉันพบในการใช้ทับทิมคือ:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
ไฮไลต์นี้ที่%()
สร้างสตริงที่เหมือน"Porter Smith\nJimmyJones\nRonald Jackson"
และเพื่อให้ได้อาร์เรย์ของคุณsplit
เป็นสตริง"\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
ดังนั้นเพื่อตอบคำถามเดิมของ OP ด้วยพวกเขาอาจเขียนได้%(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
ว่ามีอะไรเกิดขึ้นspace
เมื่อคุณต้องการspace
ให้มีอยู่ในเอาต์พุตอาร์เรย์สุดท้าย