ruby语法三

本文介绍了Ruby中的代码块概念,包括其创建方式、如何与方法调用相关联以及使用yield回调等。同时,还探讨了使用Proc和lambda创建代码块的区别,并提供了异常处理的基本结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值