2016-01-17 9 views
7

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?

+2

http maliyetini cüce gerektiğini aradığınız gerçek yöntemin maliyeti try yavaşlatır

/mitrev.net/ruby/2015/11/13/the-operator-in-ruby/ bilmeniz gereken her şeye sahip. –

+1

TLDR: çoğu durumda, neredeyse birbiriyle değiştirilebilirler, ancak bilmeniz gereken birkaç incelik var. –

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!

İlgili konular