Ruby'de bazen "?" ve "!" bunların sonunda, örneğin:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Amaçlarının ne olduğunu merak ediyordum. Onlar sadece sözdizimi şeker kaplaması mı?
Ruby'de bazen "?" ve "!" bunların sonunda, örneğin:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Amaçlarının ne olduğunu merak ediyordum. Onlar sadece sözdizimi şeker kaplaması mı?
Yanıtlar:
Okunabilirlik için "sadece şeker kaplama", ancak ortak anlamları var:
!bazı kalıcı veya potansiyel olarak tehlikeli değişiklikler gerçekleştirir ; Örneğin:
Enumerable#sortEnumerable#sort!yerinde sıralarken nesnenin sıralanmış bir sürümünü döndürür .ActiveRecord::Base#savekaydetme başarısız olursa false döndürür ActiveRecord::Base#save!.Kernel::exitbir komut dosyasının çıkmasına neden olurken Kernel::exit!, bunu hemen yapar, herhangi bir çıkış işleyicisini atlar.? , kodun bir cümle gibi daha sezgisel olarak akmasını sağlayan bir boolean ile biter - if number.zero?"sayı sıfırsa" gibi okunur, ancak if number.zerotuhaf görünür.Örnekte, name.reverseBir ters dizeye değerlendirir, ancak sonrasında name.reverse!hat yapar namedeğişken aslında ihtiva ters isim. name.is_binary_data?" nameikili veri mi?" gibi görünüyor .
Array#clearÖrneğin bkz . Diziyi temizler. Diziyi temizlemek doğal olarak onu değiştirir. Bunda şaşırtıcı bir şey yok, isim zaten bunu açıkça gösteriyor, bu nedenle: patlama yok. Ruby-forum.com/topic/176830#773946 adresine bakın .
Soru işareti, yöntemin boole değerini döndürdüğünü gösterir. Zaten burada cevaplandı:
Ruby'de soru işareti operatörü ne anlama geliyor?
Patlama, yöntemin nesnenin kendisine etki ettiğini gösterir. Zaten burada cevaplandı:
Ruby'de ?bu, yöntemin bir boole döndüreceği ve !çağrıldığı nesneyi değiştireceği anlamına gelir . Koda bakarken okunabilirliği artırmak için oradalar.
- Sanırım - programlama dillerinin çoğunun aksine ...
Ruby, yöntemlerin soru işaretleri veya ünlem işaretleriyle bitmesine izin verilir.
Geleneksel olarak, soruları yanıtlayan yöntemler (yani, Array # boş? Alıcı boşsa true döndürür) soru işaretleriyle son bulur.
Olası "tehlikeli" yöntemler (yani kendini veya argümanları değiştiren yöntemler, çıkış! Vb.), Ünlem işaretleriyle sona eren kurallardır.
From: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ , Bölüm Komik yöntem adları
?yüklem yöntemleri denir.
Dikkat edin, bu her zaman böyle değildir. Örneğin Ruby Array # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat .
Kötü bir şekilde yanabileceğiniz bir şey gibi MyActiveRecordModel.column_names.concat([url]). MyActiveRecordModel ile ilgili sonraki çağrılar MyActiveRecordModel için bir 'url' sütunu aramaya ve atmaya çalışacaktır.
Bunun yerine, concat'i yapmadan önce onu klonlamanız gerekir. Neyse ki benim test süitim bunu yakaladı, ama .. dikkat!