Sử dụng Integer (string)
Nó sẽ nâng cao một lỗi ArgumentError nếu chuỗi không thể chuyển đổi thành một số nguyên.
Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5
Bạn vẫn cần phương thức number_or_nil nếu bạn muốn hành vi là số không được trả về khi không thể chuyển đổi chuỗi.
def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end
Bạn nên cẩn thận giải cứu khỏi một ngoại lệ cụ thể. Một giải cứu trần (chẳng hạn như "rescue nil") sẽ giải cứu từ bất kỳ lỗi nào thừa kế từ StandardError và có thể ảnh hưởng đến việc thực thi chương trình của bạn theo những cách bạn không mong đợi. Integer() sẽ tăng một ArgumentError, vì vậy hãy xác định điều đó.
Nếu bạn không muốn đối phó với trường hợp ngoại lệ và chỉ muốn có một phiên bản ngắn hơn của number_or_nil của bạn, bạn có thể tận dụng giá trị trả lại tiềm ẩn và viết nó như:
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
này sẽ làm việc theo cách bạn mong đợi.
Nguồn
2014-07-27 11:50:00
''5'' phải là '5' hoặc' nil'? –
Câu hỏi không rõ ràng. Có gì sai với 'to_i'? "Chuyển đổi này" là gì? – sawa
nil là những gì tôi mong đợi, mặc dù tôi có thể sống với 5. –