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真是门神奇的语言。
原创于,请勿转载。