Güvenli operatör &.
Ruby 2.3 ve ActiveSupport'un try!
yönteminden değiştirilebilir mi? Yoksa, aralarındaki farklar nelerdir?Ruby 2.3 güvenli gezinme operatörü arasındaki farklar nelerdir? &. ve 'dene!' ActiveSupport yöntemi?
Q
Ruby 2.3 güvenli gezinme operatörü arasındaki farklar nelerdir? &. ve 'dene!' ActiveSupport yöntemi?
7
A
cevap
1
Önemli bir fark, try!
ek bir yöntem çağrısı, &.
ise. Bu burada
"1234"&.gsub(/\d/, "a")
$& #=> "1234"
Sürpriz yok yaratır bir (kuşkusuz yapmacık) farkın düşünebiliriz - regex küresel değişkenler ayarlanır yüzden regex maç yaptılar ($&
eşleşti dizedir).
Ama eğer
- Ben Sonra"1234".try!(:gsub, /\d+/, "a")
$& #=> nil
yapmak regex ilgili globaller sıfır olan (taze irb oturumda bu önemlidir). Bunun nedeni, bu globals'ların gerçekten küresel olmadıkları - kodun çağrıldığı yere bağlı oldukları (docs bu konu ve yöntem-global değişkenleri çağırıyor)
Bu durumda $&
hala ayarlanıyor; try!
yönteminin içinde ayarlandığından, hiç görmeyeceksiniz. /: Ekstra yöntem çağrısı da herhangi bir gerçek kullanımında rağmen (hızlı benchmark büyüklükte hemen hemen bir sipariş) Eğer try!
http maliyetini cüce gerektiğini aradığınız gerçek yöntemin maliyeti
/mitrev.net/ruby/2015/11/13/the-operator-in-ruby/ bilmeniz gereken her şeye sahip. –try
yavaşlatırTLDR: çoğu durumda, neredeyse birbiriyle değiştirilebilirler, ancak bilmeniz gereken birkaç incelik var. –