`
clark1231
  • 浏览: 253498 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Ruby 之 Block, Proc, Lambda

    博客分类:
  • ruby
阅读更多

Block 不是对象,是Ruby的语言特性,近似于闭包(Closure)。

范例:

def meth 
  res=  yield
  "Block called returns #{res}"
end
puts  meth do next “next_value” end    #Block called returns next_value

puts  meth do break “break_value” end   # break_vcowcuo错误哦alue

def my

  meth do return “reutnr_value” end

end

puts my ()      # return_value

红色部分就是 Block.

block 之 next

block中的 next [value] 导致 block结束,并返回[value]给调用函数。

block 之 break

block中的 break [value] 导致 block结束,并导致调用block的函数也返回,返回值是[value]。

block 之 return

block中的 return [value] 导致 block结束,并导致定义block的函数返回,返回值是[value]。

 

Proc

Proc 是Ruby 对 block的面向对象的封装。

范例:

def meth (&proc)
  res=  proc.call
  "Proc called returns #{res}"
end
puts  meth do next “next_value” end    #Proc called returns next_value

puts eth do break “break_value” end   # 出错

def my

  meth do return “reutnr_value” end

end

puts my ()      # return_value

红色部分就是 Proc.

Proc 之 next

Proc中的 next [value] 导致 Proc结束,并返回[value]给调用函数。

block 之 break

Proc中不能使用break,这回导致异常。

block 之 return

Proc中的 return [value] 导致 Proc结束,并导致定义Proc的函数返回,返回值是[value]。

 

Lambda

Lambda 是Ruby 对 Proc进一步的封装。

范例:

def meth (&proc)
  res=  proc.call
  "Lambda called returns #{res}"
end

def my

  meth (&lambda do return “reutnr_value” end)

end

puts my ()      # Lambda called returns return_value

红色部分就是 Lambda.

Lambda 和 Proc的区别就在 Lambda中的 return 导致 lambda 函数结束,并返回调用lamdad的函数(Proc和Block都是从定义的它们的函数放回)

 

Block,Proc,Lambda的区别总结

  • Block 中 用next从自身返回,用break从调用它的函数中返回, 用 returnc从定义它的函数中返回;
  • Proc 是对Block的面向对象封装,不支持breaky用法 ;
  • lambda是对Proc的封装, Lambda中return等同于next;

分享到:
评论

相关推荐

    Ruby中的block、proc、lambda区别总结

    在规则引擎中,Ruby 的闭包使用特别频繁,而且有 block,Proc和 lambda 等后几种形式的用法,很让人困惑。为了深入理解代码,再次认真学习了一下 Ruby 的闭包,特别是 block,proc 和 lambda 几种用法的异同,这次的...

    透视Ruby 1.9的Lambda函数

    《Ruby 1.9中的Lambda函数详解》 Ruby语言的一大魅力在于其Block功能,它使得编写简洁、可复用的算法变得轻而易举,...对于熟悉其他语言的开发者来说,理解并熟练运用Ruby的Lambda函数是深入掌握Ruby的关键步骤之一。

    Ruby中使用Block、Proc、lambda实现闭包

    Ruby中的闭包实现有:Block,Proc,Lambada。 首先,我们来看Block。 代码如下: ary = [1,2,3,4] ary.collect! do |a|  a*a end ary.each do |a|  puts a end 这段代码,我们使用了Array对象的block方法,将ary中...

    深入理解Ruby中的代码块block特性

    本文深入探讨了Ruby中的代码块(block)特性,从Block的基础定义出发,介绍了其与Lambda的关系、作为方法参数的应用、`yield`关键字的使用、Block与方法之间的转换,以及Block作为对象的本质。通过这些知识点的学习...

    ruby基础教程(第四版)第21章 Proc类1

    在Ruby编程语言中,Proc对象是用来封装代码块的类,它允许我们将块(block)作为对象来处理。Proc与块密切相关,可以通过两种方式创建Proc对象:直接使用Proc.new或者通过在方法定义中包含一个块。Proc对象可以调用`...

    Ruby语言开发教程与案例.zip

    3. **块、 Proc 和 Lambda**:Ruby支持块(block),这是一种在代码中定义可重复使用的匿名函数的方式,Proc和Lambda是块的两种表示形式,它们可以捕获上下文并作为对象传递。 4. **闭包**:Ruby的Proc和Lambda都是...

    深入理解Ruby中的block概念

    此外,Ruby提供了`lambda`和`proc`来将block转换为Proc对象,Proc是Ruby中的一个类,代表可调用的代码块,这样就能够在需要的时候将block当作函数处理。与block相比,`lambda`更接近于JavaScript中的函数,因为它更...

    Ruby之路

    4. **块、迭代器和 Proc**:Ruby中的块(Block)是代码的匿名封装,常与迭代器结合使用,如`each`、`map`等。Proc是块的可存储形式,可以作为参数传递和赋值。Lambda也是类似的构造,但有更严格的调用规则。 5. **...

    详解Ruby中的代码块对象Proc

    在Ruby编程语言中,代码块(block)是一种非常重要的特性,它允许程序员定义一段可执行的代码,并在需要时调用。然而,由于代码块本身不是对象,有时我们需要将其转换为对象以便于存储、传递或作为参数使用。这就是...

    ruby语言入门教程(中文版)[PDF]

    此外,Ruby还有块(block)、 Proc 和 Lambda 等特性,它们在处理迭代和函数式编程时非常有用。 面向对象是Ruby的一大特色。所有Ruby对象都是类的实例,每个对象都可以接收消息(方法调用)。Ruby提供了类、模块和...

    ruby中文教程,从基础到深入的让你学习ruby

    Ruby的块(block)、 Proc 和 Lambda 是实现回调和高阶函数的关键。 元编程是Ruby的一大特色,它允许你在运行时修改代码。Ruby提供了许多工具来进行元编程,如`eval`函数可以执行字符串中的代码,`class_eval`和`...

    Ruby API 帮助文档.zip

    3. **块、 Proc 和 Lambda**: Ruby支持块(block)、Proc和Lambda,它们都是代码的封装形式。块是通过花括号 `{}` 或 `do..end` 定义的一段代码;Proc是可存储的代码块,可以赋值给变量;Lambda更接近函数,关注参数...

    Ruby-RubyChina社区的精华帖

    2. **块(Block)、 Proc 和 Lambda**:Ruby支持块(匿名函数)的定义和使用,Proc和Lambda是块的两种可存储形式,它们之间的区别在于调用时的参数处理和返回行为。 3. **元编程(Metaprogramming)**:Ruby的强大...

    《Ruby用户指南》中文版

    书中还将详细介绍Ruby的块(block)、Proc 和 Lambda,这些都是Ruby实现回调和闭包的关键工具。通过它们,你可以编写出更简洁、更具表达力的代码。此外,Ruby的迭代器和集合操作,如map、reduce、select等,提供了...

    Ruby In a Nutshell

    - `Proc`和`lambda`都是Ruby的代码对象,可以存储和传递代码。 - `Proc`更灵活,允许在块末尾隐式返回,而`lambda`行为更接近传统函数,对参数数量和返回行为有严格检查。 9. **元编程** - Ruby的元编程能力强大...

    ruby中文文档.chm

    Ruby中的块(Block)、 Proc 和 Lambda 是其元编程能力的重要体现。它们允许你在运行时创建和修改代码,这在编写高度定制和自适应的程序时非常有用。文档会详细介绍这些概念及其在实际编程中的应用。 此外,Ruby...

    linux版 ruby-2.3.0

    - **Improved Proc and lambda**:Proc对象的行为更接近lambda,特别是在处理块的返回值时。 - **Performance enhancements**:对垃圾回收机制进行了优化,提升了整体运行效率。 Ruby-2.3.0还在错误处理、字符串...

    eloquent ruby

    - Lambda与Proc的区别。 5. **Ruby元编程** - 元编程是Ruby的核心优势之一。 - 动态创建方法和属性。 - 使用评估(Evaluation)和反射(Reflection)技术。 - 扩展和覆盖内置行为。 6. **测试与调试** - Ruby...

    Ruby语言中文教程

    5. 高级语法:Ruby拥有丰富的语法结构,如块(block)、 Proc 和 Lambda,这些使得代码可读性和可维护性更高。 6. 标准库丰富:Ruby的标准库包含了大量预定义的类和模块,涵盖了网络通信、文件操作、日期和时间处理...

Global site tag (gtag.js) - Google Analytics