当前位置:首页 > 开发 > 编程语言 > 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

    震惊

    震惊

编辑推荐
railsapi:http://www.railsbrain.com/ 1.实用的tab (tab.zip) 这里圆角就是用的css3实现的 -moz-bor
继体验一和体验二中的内容,此节将体验二中最开始的目标来实现,体验二中已经将部门添加的部分添加
Ruby语言的主要特色 编程语言总有相同之处,因为它们的目标是一致的,但每一种语言都有自己特有的部
从模型开始,先建立模型而不是建立支架 ruby script/generate model ad name:string description:te
VB当中的新语法(三) -- 扩充方法 在VB的几个新语法当中,扩充方法也是很有趣的功能之一,某种角度来
VB当中的新语法(三) -- 扩充方法 在VB的几个新语法当中,扩充方法也是很有趣的功能之一,某种角度来
近几年来,随着Google、YouTube、IRobot等大公司对Python语言的广泛使用,Python公司的身影经常出现
本文内容 单行注释 多行注释 特殊处理 文档注释 一、单行注释 #开头,以# 开头直到本行末尾的内容都
本文内容 单行注释 多行注释 特殊处理 文档注释 一、单行注释 #开头,以# 开头直到本行末尾的内容都
基本概念 一、区分大小写 在ECMAScript中的一切(变量、函数名、操作符)都是区分大小写的。 如变量
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号