2010-03-25 27 views
16

yüzden biliyorum Yakut sadece boşluk o x.nil kontrol etmek? x'in boş olup olmadığını sınar.basit yolu yakut içinde

' '(üç boşluk) x eşittir eğer 'sınamak', ya da'' (iki boşluk) veya en basit yolu nedir, vs?

Temelde, değişken tümüyle beyaz belirlemenin en iyi yolu test etmek merak ediyorum? x Eğer

+0

... tamamen net değildi çünkü beni aslında benim soruyu açmaya izin im aslında bir if açıklamada bağlamında bu yürütülmesi. bu yüzden x.nil'i kontrol ediyorum? ve x'i de istiyorum (burada sadece boşluk var, bu yüzden nil olduğunu düşünelim) – user301752

+0

@ user301752 koşullu olarak değerlendirilmeli ve boş bir dize mi demek istiyorsunuz? Onlar Ruby'de aynı değiller. (Bir irb' oturumunu açın ve aşağıdakileri kontrol edin: 'x = ''; x.nil?'.) – Telemachus

+0

neden ilk önce kırpmıyorsunuz? –

cevap

15
s =~ /^\s*$/ 

Regex çözüm. İşte bir short ruby regex tutorial.

+0

Teşekkürler! sadece yakut öğrenmeye başladı ve fark edemedim ki ~ ~ koşullu olarak oldukça tatlı olan düzenli ifadeyi değerlendirirdi – user301752

+0

@Stefan '/^'nin + $ /' olmasını istediğinizi düşünüyorum çünkü * çok fazla eşleşir (örneğin, bir eşleşme elde edersiniz boş bir dize - hiç boşluk yok). – Telemachus

+0

Tüm boşlukları "olarak kabul ediyorum. Bu, sorun alanında doğru olabilir veya olmayabilir, ancak soruyu ya * ya da yanlış yapmak için böyle bir şekilde yazılmış olduğunu düşünmedim. –

0
a = " " 

a.each_byte do |x| 
    if x == 32 
    puts "space" 
    end 
end 
+2

downvoter için, ben downvoter değildi – OscarRyz

+2

cevap yanlış (ya da nasıl bu yararlı değildir) ne olduğunu bilmek iyi olurdu, ancak bu ne basit çözüm, ne de tüm boşlukları yakalamak için gidiş 32 için kontrol ediyor. – miorel

+0

Soru, boşluk veya tüm boşluk karakterleri (sekmeler, satırsonları, vb. Dahil) isteyip istemediği konusunda belirsizdi. – Chuck

5

sonra x.strip boş dize olacaktır, tümüyle beyaz olduğunu. Yani yapabilirsiniz:

if not x.nil? and x.strip.empty? then 
    puts "It's all whitespace!" 
end 

Alternatif normal bir ifade kullanarak, x =~ /\S/ yanlış dönecektir x tüm boşluk karakterdir ancak ve ancak:

if not (x.nil? or x =~ /\S/) then 
    puts "It's all whitespace!" 
end 
+0

Neden düşüş yok ?! –

+0

Reddetmedim. – miorel

+0

Mladen, cevabınızdaki düşüşten bahsediyor, sizi başkalarını küçültmekle suçlamıyor. – Beanish

0

Yorumlarınız dayanarak ben şöyle bir spaces? yöntemi dize sınıfını genişletmek ve tanımlayabilirsiniz düşünüyorum:

$ irb 
>> s = " " 
=> " " 
>> s.spaces? 
NoMethodError: undefined method `spaces?' for " ":String 
    from (irb):2 
>> class String 
>>  def spaces? 
>>   x = self =~ /^\s+$/ 
>>   x == 0 
>>  end 
>> end 
=> nil 
>> s.spaces? 
=> true 
>> s = "" 
=> "" 
>> s.spaces? 
=> false 
>> 
21

"en iyi" bağlama bağlıdır, ama burada basit bir yoludur.

some_string.strip.empty? 
26

sen Rails kullanıyorsanız, sadece kullanabilirsiniz:

x.blank? 

Bu x nil ve x sıfır veya tümüyle beyaz ise sıfırdan döndüğünde aramak güvenlidir. Eğer Rails kullanmıyorsanız

bunu activesupport mücevher alabilirsiniz. gem install activesupport ile yükleyin. dosyanızın ya require 'active_support/core_ext yılında baz sınıflarına tüm aktif destek uzantıları almak için, ya da require 'active_support/core_ext/string'String sınıfa sadece uzantıları almak için. Her iki durumda da, ihtiyaçtan sonra blank? yöntemi kullanılabilir.

+4

Bu arada Rubyistlere, iyi ve saf bir Ruby tartışması olan Rails'i sürüklemekten ötürü özür dilerim. Öykünmek için güzel bir örnek. – MikeJ

+0

@ david-miani Düzenlemenizi + 1'leyemediğimden çok utanç verici çünkü mükemmel bir özellik. AS, halihazırda ihtiyacınız olan özellikleri de içerecek şekilde desteklediğinde, ActiveSupport'un kodlarını çoğaltmak için kötü bir tür aşırı optimizasyon. – MikeJ

0

Henüz başka :) string.all? { |c| c == ' ' }