Yakut diziler:% w vs% W


152

Fark ne?


18
"% w", Ruby'nin okunabilirliği konusunda biraz fazla ukalalaşan insanlara her zamanki imbikim. Her zaman çalışır.
Craig Stuntz

şimdi daha iyi bir yanıt var :-)
errata 23:13

6
Alakasız bir yan not olarak, bu sorunun URL'si sayfa yüklenirken bir süre kafamı karıştırdı.
Monica'nın Davası

Yanıtlar:


233

% w tek tırnak gibi ''(değişken enterpolasyon yok, daha az kaçış dizisi) tırnak,% W çift tırnak gibi tırnak "".

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

Örneğiniz% w için de çift tırnak gösteriyor. Doğru mu?
Foton

Evet. Çıktı yazdırırken, Ruby her zaman çift tırnak kullanır ve gibi karakterlerden kaçar #. '#{foo}'ve "\#{foo}"size ile kontrol edebilirsiniz aynı dizeyi, vermek '#{foo}' == "\#{foo}"içinde irb.
Brian Campbell

İlk bakışta biraz kafa karıştırıcı ama açıklama için teşekkürler.
Foton

29

% W ve% w için bulduğum bir uygulama:

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

12
Bu durumda, bunu yapmak daha kolaygreetings = %w(hi hello how\ do\ you\ do)
dinjas

21

% W normal çift tırnak ikamesi yapar. % w bunu yapmaz.


11

Eski bir yazı olmasına rağmen, soru ortaya çıkıyor ve cevaplar her zaman net görünmüyor. İşte düşüncelerim.

% w ve% W, Diziler ile ilgili Genel Sınırlı Girdi türlerine örnektir . % Q,% Q,% r,% x ve% i'yi içeren başka türler de vardır.

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 w% ile, kod enterpolasyonu (örn. # {SomeCode}) ve çalışan sınırlı kaçış karakterleri aralığımız (ör. \, \ N) yoktur. Çift tırnak ve büyük harf% ile biz W yok 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.

% W örnekleri ve tam liste, kaçış karakterleri ve sınırlayıcıları ile tam bir yazmak için: http://cyreath.blogspot.com/2014/05/ruby-w-vs-w-secrets-revealed .html

işaret


1
Bu iyi bir makale. Dizeleri veya diğer şeyleri aynı şekilde yapabileceğinizi ve çevreleyen karakterlerin istediğiniz gibi olabileceğini bilmiyordum. Örneğin,%w&readable af&
Dex


1

%W%Qörneğin, çift ​​tırnaklı dizi öğeleri için kullanılır.

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

%wgibi tek tırnaklı dizi elemanları için kullanılır %q.

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

0
array = %w(a b c d) 

İle aynı

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

%w dizenin tırnak işareti için bir kısa yol sembolüdür!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.