def evalMethod(str)
result =eval(str).to_s
#捕捉异常相当于catch
rescue ZeroDivisionError
result= '不能被0除'
#更一般的异常
rescue Exception=>err
result= err.to_s
#相当于finally
ensure
return result
end
puts evalMethod("1*2*3") #6
puts evalMethod("1*2*3/0") #不能被0除
puts evalMethod("[1]*10.each{}") #undefined method `each' for 100:Fixnum
#抛出异常
def RaiseException(excep)
if excep
raise
else
raise 'false'
end
rescue Exception=>err
return err
end
puts RaiseException(true) #''
puts RaiseException(false) #'false'
#自定义异常
class DefinedException < Exception
attr_reader :attribute
def initialize(str)
@attribute=str
end
end
#抛出自定义异常
def RaiseException2
raise DefinedException.new('DefinedException.attribute')
rescue DefinedException=>de
return de
end
puts RaiseException2().attribute #DefinedException.attribute
#一个catch块将会正常执行,直到遇到一个throw
result=0
catch :QuitThrow do
(1..4).each{|x|
lambda{|digit|
result+=digit
#遇见throw,释放堆上的指针并终止块的运行,返回到标签处
throw :QuitThrow if digit>=3
}.call(x)}
end
puts result #6
result =eval(str).to_s
#捕捉异常相当于catch
rescue ZeroDivisionError
result= '不能被0除'
#更一般的异常
rescue Exception=>err
result= err.to_s
#相当于finally
ensure
return result
end
puts evalMethod("1*2*3") #6
puts evalMethod("1*2*3/0") #不能被0除
puts evalMethod("[1]*10.each{}") #undefined method `each' for 100:Fixnum
#抛出异常
def RaiseException(excep)
if excep
raise
else
raise 'false'
end
rescue Exception=>err
return err
end
puts RaiseException(true) #''
puts RaiseException(false) #'false'
#自定义异常
class DefinedException < Exception
attr_reader :attribute
def initialize(str)
@attribute=str
end
end
#抛出自定义异常
def RaiseException2
raise DefinedException.new('DefinedException.attribute')
rescue DefinedException=>de
return de
end
puts RaiseException2().attribute #DefinedException.attribute
#一个catch块将会正常执行,直到遇到一个throw
result=0
catch :QuitThrow do
(1..4).each{|x|
lambda{|digit|
result+=digit
#遇见throw,释放堆上的指针并终止块的运行,返回到标签处
throw :QuitThrow if digit>=3
}.call(x)}
end
puts result #6