Kullanım Tamsayı dize bir tamsayıya dönüştürmek olamaz eğer bir ArgumentError hatası yükseltecektir
(dize). Eğer davranış dize dönüştürülemez zaman o nil döndürülür olmak istiyorsanız
Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5
Hala number_or_nil yöntemini gerekiyordu.
def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end
Belirli bir istisnadan kurtarmaya dikkat etmelisiniz. Çıplak bir kurtarma ("kurtarma nil" gibi), StandardError'dan devralınan herhangi bir hatayı kurtarır ve beklemediğiniz şekilde programınızın yürütülmesine müdahale edebilir. Tamsayı() bir ArgumentError artacak, bunu belirtin. Eğer
ziyade özel başa değil ve sadece örtülü dönüş değerleri yararlanmak ve olarak yazabilir senin number_or_nil daha kısa bir versiyonunu tercih ediyorsanız: Bu beklediğiniz gibi çalışacaktır
def number_or_nil(string)
num = string.to_i
num if num.to_s == string
end
number_or_nil '5' #=> 5
number_or_nil '5abc' #=> nil
.
'' 5 ''' 5 'veya' nil' olmalıdır? –
Soru açık değil. To_i ile ilgili sorun nedir? "Bu dönüşüm" nedir? – sawa
nil ben bekleyebilirim, ancak 5 ile yaşayabilirim. –