Ruby学习笔记4(范围,迭代器,异常处理)
来源:互联网 发布:跳跃网络有没有版权 编辑:程序博客网 时间:2024/05/22 09:48
范围
Ruby中的Range就是给定起点和终点,自动为您生成连续值的方式。
(1..5) #==> 1, 2, 3, 4, 5(1...5) #==> 1, 2, 3, 4('a'..'d') #==> 'a', 'b', 'c', 'd'
可以使用to.a方法将这个范围转为数组
range2 = ('bar'..'bat').to_a #["bar", "bas", "bat"]
有一些实用的方法:
.include?.min.reject {|i| i < 5 }if ((1..10) === 5) puts "5 在 (1..10)"end
还有each方法
迭代器
在Ruby中有两个主要的迭代器:each和collect
each返回集合的每个元素,通常与块结合使用
ary = [1,2,3,4,5]ary.each do |i| puts iend
collect会返回整个集合,并可以通过块来对每一个元素进行操作
a = [1,2,3,4,5]b = a.collect{|x| 10*x}puts b
如果你并不想做任何操作,只是单纯的想复制集合的话就不要用这个了。有个方法叫clone。
异常处理
begin #开始 raise.. #抛出异常rescue [ExceptionType = StandardException] #捕获指定类型的异常 缺省值是StandardException $! #表示异常信息 $@ #表示异常出现的代码位置else #其余异常 ..ensure #不管有没有异常,进入该代码块end #结束
从 begin 到 rescue 中的一切是受保护的。如果代码块执行期间发生了异常,控制会传到 rescue 和 end 之间的块。
对于 begin 块中的每个 rescue 子句,Ruby 把抛出的异常与每个参数进行轮流比较。如果 rescue 子句中命名的异常与当前抛出的异常类型相同,或者是该异常的父类,则匹配成功。
如果异常不匹配所有指定的错误类型,我们可以在所有的 rescue 子句后使用一个 else 子句。
begin # 这段代码抛出的异常将被下面的 rescue 子句捕获rescue # 这个块将捕获所有类型的异常 retry # 这将把控制移到 begin 的开头end
retry要谨慎使用,如果你不能保证rescue中的语句可以成功的挽救错误,使用retry会让这段无限执行。
raiseraise "Error Message" raise ExceptionType, "Error Message"raise ExceptionType, "Error Message" condition
raise用于抛出异常
第一种形式简单地重新抛出当前异常(如果没有当前异常则抛出一个 RuntimeError)。这用在传入异常之前需要解释异常的异常处理程序中。
第二种形式创建一个新的 RuntimeError 异常,设置它的消息为给定的字符串。该异常之后抛出到调用堆栈。
第三种形式使用第一个参数创建一个异常,然后设置相关的消息为第二个参数。
第四种形式与第三种形式类似,您可以添加任何额外的条件语句(比如 unless)来抛出异常。
begin #.. 过程 #.. 抛出异常rescue #.. 处理错误 ensure #.. 最后确保执行 #.. 这总是会执行end
ensure不管有没有异常都会执行
begin #.. 过程 #.. 抛出异常rescue #.. 处理错误else #.. 如果没有异常则执行ensure #.. 最后确保执行 #.. 这总是会执行end
else在没有异常的情况下执行
def promptAndGet(prompt) print prompt res = readline.chomp throw :quitRequested if res == "!" return resendcatch :quitRequested do name = promptAndGet("Name: ") age = promptAndGet("Age: ") sex = promptAndGet("Sex: ") # .. # 处理信息end#....
在catch执行的过程中,如果遇到同名的throw则跳出catch,否则正常执行完catch。如果不在catch里throw则会报错。
我们可以创建自己的异常类,它必须是Exception 或其子代的子类。
- Ruby学习笔记4(范围,迭代器,异常处理)
- ruby学习笔记(9)--异常处理
- Ruby学习笔记_异常处理rescue
- ruby学习笔记(6)--范围
- Ruby学习笔记(12)_范围Range
- Python学习笔记(4)--异常处理
- Ruby语言基础学习九:Ruby范围、迭代器、
- 异常处理学习笔记
- Ruby学习笔记(14)_异常
- Ruby学习笔记4
- Python3学习笔记(4)——异常处理
- JAVA学习笔记(一)---异常处理
- 异常处理 学习笔记(一)
- 异常处理 学习笔记(二)
- laravel 学习笔记一 (异常处理)
- java学习笔记(2):异常处理
- 异常处理---SpringMVC学习笔记(十)
- SpringMVC学习笔记(七)处理异常
- 函数指针与回调函数的理解
- windows启动tomcat闪退
- 使用模板进行类型转换
- jqGrid刷新指定页码列表
- MySQL Replication(复制)基本原理
- Ruby学习笔记4(范围,迭代器,异常处理)
- systemd.exec — Execution environment configuration
- R语言之导入数据源(二)
- Call requires API level,resolving error markers,Android SDK Content Loader
- 问题 K: 成绩处理
- div中未知宽高的img垂直居中显示
- Struts2 文件上传
- Java反射机制的学习(2)
- 求13的13次方的最后三位数