C08 Exceptions
1. 定义一个Exception
class MyException < StandardError
def initialize(info)
super(info)
end
end
2. 抛出并且捕获一个异常
require 'my_exception'
def raise_exception
raise MyException.new("ERROR occurs!!!")
end
begin
raise_exception()
rescue MyException => e
print(e.backtrace.join("\n"))
end
3. ensure和else
require 'my_exception'
def raise_exception_bycondition(num)
if num != 5
puts("num = #{num}")
elsif num == 5
puts("num = 5")
raise MyException.new("Num == 5!!!")
end
end
print("Input a number:")
end_num = Integer(gets)
begin
for i in 1..end_num
raise_exception_bycondition(i)
end
rescue MyException => e
print(e.backtrace.join("\n"))
puts()
else
puts("No MyException!")
ensure
puts("Alwasy ouput this sentense!")
end
4. Retry
require 'my_exception'
def raise_exception_bycondition(raiseornot)
if raiseornot
raise MyException.new("Raise MyException!")
else
puts("Don't raise MyExcetpion!")
end
end
$raiseornot = true
begin
raise_exception_bycondition($raiseornot)
rescue MyException => e
print(e.backtrace.join("\n"))
puts()
$raiseornot = false
retry
end
5. throw and catch
def prompt_and_get(prompt)
print prompt
res = readline.chomp
throw :quit_requested if res == "!"
res
end
catch :quit_requested do
name = prompt_and_get("Name: ")
age = prompt_and_get("Age: ")
sex = prompt_and_get("Sex: ")
puts("name: #{name} -- Age: #{age} -- Sex: #{sex}")
end
6. caller在raise时的使用
require 'my_exception'
def raise_exception
raise MyException, "ERROR occurs!!!", caller[1..-1]
end
def raise_exception2
raise_exception
end
begin
raise_exception2()
rescue MyException => e
print(e.backtrace.join("\n"))
puts()
end
结果显示是:
caller_sample.rb:12
C09 Modules
1. Module
#module1.rb
module Module1
Name = "Module1 Name"
def Module1.info
"Module1"
end
end
#module2.rb
module Module2
Name = "Module2 Name"
def Module2.info
"Module2"
end
end
#module_sample.rb
require 'module1'
require 'module2'
puts(Module1.info)
puts(Module2.info)
puts(Module1::Name)
puts(Module2::Name)
2. Mixin
#observable_mixin.rb
module Observable
def observers
@observer_list ||= []
end
def add_observer(obj)
observers << obj
end
def notify_observers
observers.each {|o| o.update }
end
end
#weather_info.rb
require 'observable_mixin'
class WeatherInfo
include Observable
end
class WeatherShowForm1
def update
puts 'Weather update1'
end
end
class WeatherShowForm2
def update
puts 'Weather update2'
end
end
winfo = WeatherInfo.new()
winfo.add_observer(WeatherShowForm1.new)
winfo.add_observer(WeatherShowForm2.new)
winfo.notify_observers()
3. 名字查找顺序
Ruby looks first in the immediate class of an object, then in the mixins included into that class, and then in superclasses and their mixins. If a class has multiple modules mixed in, the last one included is searched first.
分享到:
相关推荐
3. 书籍的重要性:《Programming Ruby》被广泛认为是学习Ruby的最佳入门书籍。多位Ruby社区的重要人物如Mike Clark和Rich Kilmer等都表示,此书让他们对Ruby有了深入的了解,并在实践中获得了丰富的编程经验。 4. ...
《Programming Ruby - The Pragmatic Programmer's Guide》第二版(2005年注释版)是一本在IT行业中享有盛誉的经典书籍,专门针对Ruby编程语言进行了深入浅出的讲解。该书不仅覆盖了Ruby语言的基础知识,还探讨了其...
《Programming Ruby》是一本关于Ruby编程语言的经典书籍,它的第三章深入探讨了Ruby的基本语法和核心概念。在这一章中,作者介绍了变量、常量、符号、数组、哈希等核心数据类型,以及控制流(条件语句和循环)和方法...
《Programming Ruby 2nd Edition》是关于Ruby编程语言的经典指南,尤其对于想要深入理解并熟练掌握Ruby编程的开发者来说,这本书具有极高的价值。Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的...
《Programming Ruby 2nd》是编程领域的一本经典著作,由Dave Thomas、Chad Fowler和Andy Hunt合著,被广大开发者誉为“程序员的指南”。这本书深入浅出地介绍了Ruby编程语言,帮助读者掌握这种优雅而强大的语言。 ...
### 知识点一:《Programming Ruby》书籍概述 - **书籍名称**:“Programming Ruby”(也被称为“Pickaxe Book”) - **版本**:本书为第二版 - **作者团队**:本书由Dave Thomas、Andy Hunt、Thomas Stewart、...
《Programming Ruby》是一本关于Ruby编程语言的经典著作,由Dave Thomas、Andy Hunt和Chad Fowler合著。这本书自2004年初版以来,一直是学习Ruby的首选资源,被誉为“Pickaxe”书,因其封面的图标而得名。Ruby是一种...
《Programming Ruby》被誉为是学习Ruby语言的最佳指南,这本书在IT界享有极高的声誉,被亲切地称为“镐头书”,其价值与影响力无远弗届。本书不仅详细介绍了Ruby语言的核心概念、语法结构以及编程实践,还深入探讨了...
内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm
《Programming Ruby》中文版第二版是一本专注于Ruby编程语言的经典教程。这本书的两个版本——高清扫描版和高清文字版,都是为了便于读者学习和查阅,其中都带有书签功能,帮助读者快速定位到相关内容。 Ruby是一种...
《The C Programming Language》这本书是C语言学习者的经典教材,对于初学者来说,它提供了深入浅出的讲解。本文将着重讨论第一章中提到的三个重要知识点。 首先,我们要理解循环终止的机制。在C语言中,常见的循环...
《Programming Ruby 1.9 (3rd edition)》是一本专为程序员编写的关于Ruby语言的权威指南,这本书的第三版详细介绍了Ruby 1.9版本的语言特性、库以及编程实践。Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的...
1. 书籍介绍:《Programming Ruby - 2nd Edition》是一本关于Ruby编程语言的英文书籍。该书被多位业界知名人士推荐,并对Ruby语言的介绍和学习提供了重要支持。 2. Ruby语言的特点:Ruby被描述为一个强大且实用的...
《Programming Ruby》是一本专注于介绍Ruby编程语言的经典著作,它为初学者和有经验的开发者提供了深入理解Ruby语言的全面指南。Ruby是一种面向对象、动态、灵活的编程语言,以其简洁、优雅的语法和强大的元编程能力...