Ruby Basic - 9


Exception


begin rescue

begin
	1 / 0 # zero division error
rescue
	puts 'Exception raised, but handled'
end
方法で救援を使用する場合はbeginを省略できます.defがbeginの役を演じているからです.
def divide(x, y)
	x / y
rescue
	puts "Exceptino raised, but handled"
end

特定の例外の処理


Exceptionクラスのサブクラスとして受信します.
begin
	...
rescue ZeroDivisionError
	...
rescue TypeError
	...
rescue
	...
end

exception methods


=>を使用してeオブジェクトを使用する方法.
begin
	...
rescue ZeroDivisionError => e
	puts e.class
rescue TypeError => e
	puts e.class
rescue => e
	puts e.class
end
Exceptionメソッドのタイプ
Exception#class
Exception#message
Exception#backtrace
Exception#full_message

raise exception


ruby異常タイプ
dev even_numbers(array)
	unless array.is_a?(Array)
    	raise ArgumentError
    end
    
    if array.length == 0
    	raise StandardError.new("Too few elements")
    end
    
    array.find_all { |el| el.to_i % 2 == 0 }
end
custom exceptionクラスを作成するとStandardErrorが継承されます.正式なドキュメントでは、標準エラーが常にdefaultに設定されているためです.
class TooLoudError < StandardError
	attr_reader :volume
    
	def initialize(value, msg=nil)
    	# Let parent class set message
    	super(msg || "Too loud!")
        @volume = value
    end
end

class Radio
	def volume=(value)
    	if value < 1 || value > 10
        	raise TooLoudError.new(value)
        end
        @volume = value
    end
end

begin
	r = Radio.new
    r.volume = 20
rescue TooLoudError => e
    puts "Volume #{e.volume}: #{e.message}"
end