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

proc和yield的区别

    博客分类:
  • ruby
阅读更多
最近开始学习ruby,总是搞不懂proc和yield的区别。
今天有仔细翻了下资料,学习了下,感觉有点明了了。
对于proc和yield总结如下:
yield,意味让路,就是这里要写代码但是要写什么还不知道,那先yield。等以后想好了再写上;proc是先写了一段代码,但是暂时不用,我先放着,等到想用了在call你。
关于这方面的例子网上可以找到很多。附一个别人的供大家参考。
sayHello = Proc.new{puts "hello"} # 代码不会立即执行
sayHello.call# 现在我们来调用运行Proc的存放的代码
def time
   start = Time.now
   yield
   puts Time.now - start
 end
time { puts "block!!"  }

理解比较浅显,有不足之处还望指出。
0
0
分享到:
评论

相关推荐

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

    理解Proc和`lambda`的区别以及如何使用它们是Ruby编程中的重要概念,这有助于编写更灵活和可维护的代码。Proc对象和闭包的特性使得我们能够在函数式编程中利用高阶函数,以及在处理回调、事件驱动编程等方面发挥重要...

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

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

    详解Ruby中的代码块对象Proc

    注意:`lambda`和`Proc.new`在处理参数时有所不同,`lambda`会严格检查参数数量,而`Proc.new`则更宽松。 3. 使用箭头运算符`->`: ```ruby inc = ->(x) { x + 1 } inc.call(2) #=> 3 ``` 4. 使用`proc`关键字: `...

    guard-yield:更改文件时运行任何 Ruby 代码 addedremoved

    安装在您的 Gemfile 中: group :development do gem 'guard-yield'end 安装: $ bundle install或者自己安装: $ gem install guard-yield用法将片段添加到您的Guardfile中: $ bundle exec guard init yield然后,...

    在Ruby中设计Callback机制

    这里我们将重点讨论两种主要的回调机制:Proc对象和Blocks。 1. Proc对象: Proc(Procedure)是Ruby中的一种匿名函数,它可以捕获并存储代码块。Proc对象可以在稍后的时间点被调用执行,这就为回调提供了可能。...

    ruby 知识总结

    在Ruby中,`Proc` 和 `lambda` 可以看作是无名的方法,而 Method 是有名字的方法。 在Ruby中,`yield` 用于在方法中调用块,而 `call` 用于调用 Proc 或 Lambda 对象。在数组的 `iterate!` 示例中,第一个版本使用 ...

    the ruby way

    Proc是保存代码块的对象,Lambda类似但更强调函数行为,如正确处理return和yield。 4. **闭包和作用域**:Ruby的块和Proc是闭包,可以捕获并保持定义时的环境,即使在其他作用域中执行也能访问。这在函数式编程和...

    Programming Ruby 1.9

    9. **Proc和Lambda的区别**:在Ruby 1.9中,`Proc`和`lambda`之间的区别更加明显,特别是关于`yield`的行为,`lambda`更接近于其他函数式语言中的函数行为。 10. **内建类和模块的扩展**:Ruby 1.9对很多内建类和...

    Mastering Ruby Closures

    块不是对象,它们不能被赋值给变量或者作为参数传递给方法,但可以使用特定的关键字如yield来执行块中的代码。块的使用让Ruby的编程风格更为简洁和流畅。 Proc对象是Ruby中闭包的一种实现形式,它可以被赋值给变量...

    multi_block:将多个块传递给 Ruby 方法

    多块 MultiBlock 是一个迷你框架,用于将多个块传递给方法。 它使用以简单的语法完成此操作。 接收方法可以产生所有块...yield :success # calls :success proc without args yield :success , "Code Brawl!" # calls

    oGood start for ruby

    4. 函数和块:定义函数、块的使用(yield关键字)、Proc和Lambda的区别。 5. 文件操作:如何在Ruby中打开、读取、写入和关闭文件。 6. Excel文件处理:使用Ruby的CSV库或第三方库如Nokogiri进行Excel文件的数据读取...

    kernel-schedule:内核模块做进程调度

    内核调度第 1 部分:实施和设计决策下面给出了我们为实现速率单调调度的内核模块而遵循的步骤: Step1 : 我们在Proc文件系统中创建了一个目录条目“/proc/mp2”,并在该目录中创建了一个文件条目“/proc/mp2/status...

    Ruby元编程第二版中文

    5. **Proc对象与lambda**:Ruby的`Proc`和`lambda`可以创建匿名函数,它们可以被赋值给变量,作为参数传递,或者用作方法的返回值。 6. **块与yield**:Ruby的块是代码的匿名片段,可以用`yield`来调用。它们是元...

    Ruby Source Code

    7. **闭包与Lambda**:Ruby中的Proc和Lambda都是闭包,它们可以捕获定义时的环境。Lambda更接近函数,有严格的参数检查和正确的`return`行为。 8. **模块**:模块用于组织代码,提供命名空间,还可以作为混入机制,...

    ruby使用文档

    - `Proc`对象可以存储块,与`lambda`类似,但有细微区别。 9. **标准库与Gem**: - Ruby自带丰富的标准库,如File、Net、JSON等。 - Gem是Ruby的包管理器,用于扩展功能和库,如Rails框架、Nokogiri解析器等。 ...

    Ruby基础语法使用方法全套讲解,风格讲解指南大全

    Ruby还支持匿名函数(Proc和Lambda),它们可以作为参数传递,也可以赋值给变量。 5. **类与模块**:Ruby是面向对象的语言,一切皆对象。类(Class)用于定义对象的蓝图,包含属性(instance variables)和行为...

    ruby hacking guide 中文版教程

    书中会深入探讨这些概念,包括Proc和Lambda的区别,以及如何通过yield关键字使用块。 4. **元编程**:Ruby的元编程能力让开发者可以编写自我修改的代码,这是其独特魅力之一。读者将了解到Ruby的元类、方法定义、类...

    ruby基础教程(第四版)第11章 块1

    Ruby中的`Proc`对象允许你将块作为对象处理,可以在方法外部执行块或传递给其他方法。在方法定义时,通过`&block`参数可以捕获块,并在内部通过`call`方法执行。如果方法调用时没有传递块,`block`参数将为`nil`,这...

Global site tag (gtag.js) - Google Analytics