当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

ruby语法三

发表于: 2010-06-04   作者:酷的飞上天空   来源:转载   浏览:
摘要: ruby中的代码块 代码块可以看作是一个没有名字的方法,他本身也是一个对象,一个Proc类的实例 匿名的代码块又两种创建方式 一种使用花括号包围的方式, 如   {puts "hello"}  另一种是do和end关键字 do puts "hello" end   代码块创建以后就可以将它与方法调用相关

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语法三

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号