FileUtils belgelerine bakıyorum.
Aşağıdaki satırla kafam karıştı:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Ne anlama %w
geliyor? Beni belgelere yönlendirebilir misin?
FileUtils belgelerine bakıyorum.
Aşağıdaki satırla kafam karıştı:
FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
Ne anlama %w
geliyor? Beni belgelere yönlendirebilir misin?
Yanıtlar:
%w(foo bar)
için bir kısayoldur ["foo", "bar"]
. Yani, virgül yerine boşluklarla ayrılmış ve etraflarında tırnak işaretleri olmadan bir dizi dizeyi yazmak bir gösterimdir. Zenspider'ın quickref'inde literal yazmanın yollarının bir listesini bulabilirsiniz .
%w(ab\ c def) # => ["ab c", "def"]
Ben %w()
bir "kelime dizisi" olarak düşünüyorum - elemanları boşlukları ile sınırlandırılmış ve dizeleri bir dizi döndürür.
Diğer% değişmez değerler var:
%r()
normal bir ifade yazmanın başka bir yoludur.%q()
tek tırnaklı bir dize yazmanın başka bir yoludur (ve yararlı olan çok satırlı olabilir)%Q()
çift tırnaklı bir dize verir%x()
bir kabuk komutudur%i()
bir dizi sembol verir (Ruby> = 2.0.0)%s()
foo
sembole dönüşür ( :foo
)Baţka kimseyi tanýmýyorum, ama orada biraz gizleniyor olabilir ...
%i()
bir dizi sembol oluşturmak için de kullanabilirsiniz .
%()
(veya %[]
veya %{}
) vardır %Q()
. Örn%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
Ayrıca %s
herhangi bir sembol oluşturmanıza izin veren de vardır, örneğin:
%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'dan beri:
%i( a b c ) # => [ :a, :b, :c ]
%i[ a b c ] # => [ :a, :b, :c ]
%i_ a b c _ # => [ :a, :b, :c ]
# etc...
%W
ve%w
tırnak işaretleri ve virgül kullanmadan bir dizi dizisi oluşturmanıza olanak tanır.
Eski bir yazı olmasına rağmen, soru ortaya çıkıyor ve cevaplar her zaman net görünmüyor, bu yüzden düşüncelerim:
%w
ve Diziler ile ilgili %W
Genel Sınırlı Girdi türlerinin örnekleridir . İçeren diğer türleri vardır %q
, %Q
, %r
, %x
ve %i
.
Büyük ve küçük harf arasındaki fark, tek ve çift tırnak özelliklerine erişmemizi sağlamasıdır. Tek tırnak ve (küçük harf) ile %w
, kod enterpolasyonu ( #{someCode}
) ve çalışan ( \\
, \n
) sınırlı kaçış karakterleri aralığımız yoktur . Çift tırnak ve (büyük harf) ile %W
biz yapmak bu özelliklere erişebilir.
Kullanılan sınırlayıcı, sadece açık parantez değil, herhangi bir karakter olabilir. Etkili olduğunu görmek için yukarıdaki örneklerle oynayın.
Örnekleri %w
ve tam listeyi tam olarak yazmak için , kaçış karakterleri ve sınırlayıcıları, " Ruby -% w vs% W - sırlar açığa çıktı! "
Bunun yerine %w()
kullanmalıyız%w[]
Ruby stil rehberine göre:
Bir kelime dizisine ihtiyacınız olduğunda% w değerini değişmez dizi sözdizimine tercih edin (içinde boşluklar ve özel karakterler olmayan boş olmayan dizeler). Bu kuralı yalnızca iki veya daha fazla öğeye sahip dizilere uygulayın.
# bad
STATES = ['draft', 'open', 'closed']
# good
STATES = %w[draft open closed]
Çeşitli yüzde değişmez değerleri için en uygun parantezleri kullanın.
[]
dizi değişmezleri ( %w, %i, %W, %I
) için, standart dizi değişmezleriyle hizalandığından.
# bad
%w(one two three)
%i(one two three)
# good
%w[one two three]
%i[one two three]
Daha fazlası için burayı okuyun .
De yüzde Yaylı belgelerinde den alınmıştır http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :
Bir String oluşturan% (...) öğesinin yanı sıra,% başka nesne türleri de oluşturabilir. Dizelerde olduğu gibi, büyük harf de enterpolasyona ve çıkış karakterlerine izin verirken küçük harf harfleri devre dışı bırakır.
Bunlar yakutta yüzde dizeleridir:
...
% w : Dizeler Dizisi
CSV e-tablosundan kullanıcıların tam adlarını içeren bir grup sütun verildi ve biçimlendirmeyi boşluklarla birlikte saklamam gerekiyordu. Yakut kullanırken onları içeri almanın en kolay yolu:
names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')
Bu %()
, bir dizeyi oluşturan "Porter Smith\nJimmyJones\nRonald Jackson"
ve diziyi size split
dizede almak için vurgulamaktadır ."\n"
["Porter Smith", "Jimmy Jones", "Ronald Jackson"]
Bu yüzden OP'nin orijinal sorusunu da cevaplamak için , son dizi çıktısında var olmasını istediğinizde %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')
olup olmadığını yazmış olabilirler .space
space