>> current_user.first_visit
=> 0
>> if current_user.first_visit
>> puts "test"
>> end
test
=> nil
Neden testi yazdırmak mu ?Ruby'de neden "sıfır ise" yapamıyorum?
>> current_user.first_visit
=> 0
>> if current_user.first_visit
>> puts "test"
>> end
test
=> nil
Neden testi yazdırmak mu ?Ruby'de neden "sıfır ise" yapamıyorum?
Ruby sadece nil
false
analogdan olarak kabul edilebilir. Hiçbir varsayım 0
, ""
veya []
false
anlamına gelir, yani == 0
, .blank?
, .empty?
, .zero?
vb
Ama nil
hep false
olarak davranmaz kullanmalıdır. Örneğin, dize enterpolasyondaki, .to_s
yöntem FalseClass
ve NilClass
için farklı çalışır #{}
içerikleri, uygulanır:
irb(main)> "qwe #{false} rty"
=> "qwe false rty"
irb(main)> "qwe #{nil} rty"
=> "qwe rty"
Lütfen unutmayın '.blank? ',' .empty?', Rails framework ("activesupport" aracılığıyla) tarafından sağlanan ve Ruby Standard veya Core Lib'de mevcut olmayan uzantılardır. Ayrıca farklı davranış, "# {false}", "to_s" yöntemini çağırmasıdır. – Swanand
@swanand:? 'Boş' sıfır 've' çekirdek lib vardır (fakat aklındaki hangi sınıflar emin değilim). –
@ pdom'ın düzenlemesi doğruydu. IDK, neden diğerleri reddetti? http://stackoverflow.com/review/suggested-edits/7845176 – Nakilon
veri (vs nil
). C tarafından desteklenen ve 0'dan yanlış olan (C++ gibi diğer dillere ait) örtük örtük dönüşüm, C'nin farklı bir boole türüne sahip olmasından önceki günlerden daha fazla tarihsel bir eserdi. Orada, uygun bir sentinel değeri veya sezgisel bir anlamı olan 0'a dayanır. Pek çok şey için (ör., Giyim boyutlarının 0 ila 8 arasında olduğu bazı ülkeler, POSIX libC işlev çağrısı sonuçları) sıfır, mantıksal olarak eşdeğer bir boole dönüştürülmez, bu yüzden Ruby kendi yoluna gitmesi kötü bir şey değildir. Bu açıdan
current_user.visit_counter > 0
current_user.visit_counter >= 1
current_user.visit_counter != 0
bu
>> current_user.first_visit
=> 0
>> if current_user.first_visit != 0
>> puts "test"
>> else
>> puts "fail"
>> end
fail
=>nil
da gerek beklenen değer
Sorunuza yanıt alınmış gibi görünüyor ile eşleşmesi. Ancak, true/false için sayısal değerleri kullanmayı bırakmalısınız. Diliniz doğru ve yanlışsa, diliniz bunları destekliyorsa – colithium
Rails tamsayı türünü genişletti. Ayrıca "eğer current_user.first_visit.zero?" – vise
@vise:? '.zero' düz eski yakut şöyledir: [APIdock.com bağlantı] (http://apidock.com/ruby/v1_8_6_287/Numeric/zero%3F) –