ruby的方法和block

简介: 在ruby中方法与block的合用 :~/ruby$ irbirb(main):001:0> def take_block(p1)irb(main):002:1>   if block_given?irb(main):003:2>      yield(p1)irb(main):004:2>   ...

在ruby中方法与block的合用

:~/ruby$ irb
irb(main):001:0> def take_block(p1)
irb(main):002:1>   if block_given?
irb(main):003:2>      yield(p1)
irb(main):004:2>   else
irb(main):005:2*      p1
irb(main):006:2>   end
irb(main):007:1> end
=> nil
irb(main):008:0> take_block("no block")
=> "no block"
irb(main):009:0> take_block("no block") {|s| s.sub(/no /,'')}
=> "block"
irb(main):010:0>

 

下面是调用yield实现的简单迭代(回调)

irb(main):001:0> def three_times
irb(main):002:1>    yield
irb(main):003:1>    yield
irb(main):004:1>    yield
irb(main):005:1> end
=> nil
irb(main):006:0> three_times { puts "Hello"}
Hello
Hello
Hello
=> nil
irb(main):007:0>

 

注:

    Kernel.block_given?方法: 当某方法和block关联在一起时, Kernel.block_given?返回真,否则返回假





相关文章
|
10月前
|
Ruby
浅谈Ruby中的block, proc, lambda, method object的区别
浅谈Ruby中的block, proc, lambda, method object的区别
61 0
|
Ruby 容器
【Ruby on Rails全栈课程】2.7 块(Block)和迭代器
1、块(Block) 块是ruby 的一个独特特性,是一种可以和方法调用相关联的代码块。 是在花括号{}或者do…end之间的一组代码,一般我们在单行中block用花括号{},在多行中用do…end (1)块的格式
95 0
|
Go Ruby
Ruby学习笔记-Block, Proc and Lambda
1.Block:   Ruby中的块就是由多行代码组成的一个代码块,通常可以把它认为是一个匿名方法,常用来迭代一个数组或范围(如each, times方法);语法格式如下:   {                       //code   }             OR   do...
691 0
|
2月前
|
Ruby
|
1月前
|
数据采集 Web App开发 数据处理
Ruby网络爬虫教程:从入门到精通下载图片
Ruby网络爬虫教程:从入门到精通下载图片
|
2月前
|
JSON 数据格式 Ruby
|
2月前
|
JSON Ubuntu Linux