ruby中的代码块
代码块可以看作是一个没有名字的方法,他本身也是一个对象,一个Proc类的实例
匿名的代码块又两种创建方式
一种使用花括号包围的方式,
如
{puts "hello"}
另一种是do和end关键字
do
puts "hello"
end
代码块创建以后就可以将它与方法调用相关联,在方法中可以使用yield回调该代码块
如:
def test_function
puts "代码块开始"
yield
puts "代码快结束"
end
test_function{puts "hello"}
test_function do
puts"this is do and end !"
end
输出:
代码块开始
hello
代码快结束
代码块开始
this is do and end !
代码快结束
代码块接收参数的定义如下:
{|x| puts x}
do |x,y|
puts x+y
end
回调时为
yield 1
yield (1,2)
完整例子如下:
def test_function(arg)
yield arg
end
test_function("hello"){|x| puts x}
#输出 hello
迭代在ruby库中很多都使用了代码块
下面实现一个Array的each功能
class Array
def my_each
#遍历数组
for i in(0..self.length-1)
#将数组中的元素逐个传入代码块进行迭代
yield self[i]
end
end
end
[1,2,3,4].my_each{|x| puts x}
代码块的创建还可以通过Proc和lambda创建
通过lambda创建的代码块不会因代码块中含有return而返回,这是与Proc的一个区别
def proc_test
f = proc { return "从Proc代码中直接跳出" }
f.call
return "proc_test正常退出"
end
def lambda_test
f = lambda {return "从lambda代码中直接跳出" }
f.call
return "lambda_test正常退出"
end
puts proc_test
puts lambda_test
输出
从Proc代码中直接跳出
lambda_test正常退出
异常处理
结构如下
begin
#正常执行的代码
rescue Exception1
#处理Exception1类型的异常
rescue Exception2
#处理Exception2类型的异常
rescue =>err
#处理其他类型的异常
ensure
#最后总是被执行的代码,类似于java中的finally方法
end
例子:
x=10
y=0
begin
puts x/y
rescue ZeroDivisionError
y=2
retry #retry用于重复整个迭代周期
ensure
puts "总是被执行"
end
分享到:
相关推荐
ruby语法基础教程,学习ruby的入门教程。
ruby常用语法整理,大部分是晚上能找到的,做了一下整理
NULL 博文链接:https://mojianpo.iteye.com/blog/727252
前端学 Ruby:熟悉 Ruby 语法
ruby语法基础教程及Ruby教程中文版和安装文件,三者集于一个文件夹内
Ruby基本语法
NULL 博文链接:https://ice-cream.iteye.com/blog/512580
<<Prorammer ruby>> 经典语法截图
Ruby是一种动态、面向对象的编程语言,它具有简洁、易读的语法,被称为“程序员最好的朋友”。Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能...
Apipie - Ruby on Rails API 文档和展示工具使用Ruby语法
ruby-4-variables.mp4 ruby-5-variables-rules.mp4 ruby-6-expression.mp4
Ruby基础语法经典学习PPT教程. 网上关于ruby的PPT教程不太多,这个个人觉得还可以。
Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl 类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展 Ruby的功能。
一些简单的ruby语法,全都是基础,初学者可以看看