Ruby代码块Blocks的用法介绍

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的用法介绍)