美文网首页RubyRuby & RailsRuby
Ruby代码块Blocks的用法介绍

Ruby代码块Blocks的用法介绍

作者: DUNT | 来源:发表于2016-07-03 13:55 被阅读403次

Ruby的代码块,是Ruby的特色之一。通常存在于do...end中间或者花括号{}中间。代码块可以作为隐式的或者显示的参数传入函数,在某些情况下带来了便利。本文就Ruby的代码块的四个简单用法做个介绍。

1. 基础用法

任何函数在调用的时候都能将代码块作为隐变量传入,在方法的内部,用yield关键字执行代码块。举个栗子

def hello 
  yield    #此处执行代码块
end
hello {puts 'Hello, jianshu.com'} #这是跟在函数hello后面的代码块

运行结果跟下面的代码是等价的

def hello  #代码块绑定的函数
  puts 'Hello, jianshu.com'
end
hello

2. 检查是否有代码块被传入

在方法中用block given? 来判断是否有代码块被传入。

def hello
  unless block_given?
    puts 'We don\'t know what to say...' 
  else 
    yield 
  end
end
hello    #未传入代码块
hello {puts 'Welcome to my blog.'}    #传入代码块

其结果为

> We don't know what to say...
> Welcome to my blog

3. 含有参数的代码块的调用

def hello
  yield('Peach','jianshu.com')
end
hello {|name, address| puts name+', welcome to '+address}

运行结果为

> Peach, welcome to jianshu.com

4. 代码块作为显式参数传入

以上的三个例子中,函数内部的调用代码块用的是yield,并没有显示地使用代码块。代码块可以作为显示参数传入,作为block variable在函数中进行调用。

def hello(name,address,&block)  
  block.call name,address
  puts "Block has #{block.arity} parameters"
end
hello('Peach','Jianshu.com') {|name, address| puts name+', welcome to '+address}

运行结果为

> Peach, welcome to Jianshu.com
> Block has 2 parameters

在上面的代码中,将含有参数的代码块作为最后一个参数传入函数,用block.call 来执行代码块,block.arity 返回代码块的参数个数。

以上就是Ruby的代码块的简单入门。话说回来,Ruby真是门神奇的语言。

原创于简书,请勿转载。

相关文章

  • Ruby代码块Blocks的用法介绍

    Ruby的代码块,是Ruby的特色之一。通常存在于do...end中间或者花括号{}中间。代码块可以作为隐式的或者...

  • 关于Blocks,总得知道点什么

    Blocks是iOS4之后引入的新特性,Blocks顾名思义为块,引申为代码块,使用Blocks可以很轻松的实现匿...

  • Ruby代码块

    Ruby最强大的语言就是他的代码块 [root@master1 ruby]# cat test_block.rb

  • flutter-基类

    1.BaseStatelessWidget 用法:代码块 2.BaseStatefulWidget 用法:代码块

  • Ruby块与模块

    Ruby 块 Ruby 有一个块的概念。块由大量的代码组成。您需要给块取个名称。块中的代码总是包含在大括号 {} ...

  • 7、【Swift】闭包

    闭包-Closures 自包含的函数代码块 与 C 和 Objective-C 中的代码块(blocks))以及其...

  • [iOS笔记]Swift中的闭包(Closures)

    闭包是自包含的函数代码块,Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其...

  • Objective-C之Blocks(一)

    Blocks概要 什么是Block,笔者认为Block其实就是一段代码块,这段代码块可以嵌入在函数中并且带有自己的...

  • Metaprogramming Ruby - Blocks No

    A review of the basics of blocks An overview of scopes an...

  • 创建自定义块 - 定义块

    title: 创建自定义块 - 定义块 Create Custom Blocks - Define Blocks ...

网友评论

    本文标题:Ruby代码块Blocks的用法介绍

    本文链接:https://www.haomeiwen.com/subject/owxcjttx.html