块(下)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了块(下)相关的知识,希望对你有一定的参考价值。

(1)代码清单11.8

技术分享

(2)根据上例进行的:控制块的执行

技术分享

(3)Proc将块封装为对象

之前我们使用块,是定义方法然后根据这个方法名定义对应的块,这样方法名和块是唯一对应。

下面讲的是把块当作对象处理,需要用到Proc对象,那么使用Proc.new定义带块的方法,要调用块就去调用Proc对象的call方法。这样的块就不必和方法名唯一绑定。

技术分享

(4)在方法定义时,如果末尾的参数使用"& 参数名"的形 式,Ruby 就会自动把调用方法时传进来的块封装为 Proc 对象。改写代码清单11.8为该形式:

技术分享

我们在首行的方法定义中定义了 &block 参数。像这样,在变量名前添加 & 的参数被称为 Proc 参数。如果在调用方法时没有传递块,Proc 参数的值就为 nil,因此通过这个值就可以判断出是否有块被传入方法中。另外,执行块的语句不是 yield,而是 block.call(num),这一点与之前的例子也不一样。

在第 7 章中我们提到过方法可以有多个参数,而且定义参数的默认值等时都需要按照一定的顺序。而 Proc 参数则一定要在所有参数之后,也就是方法中最 后一个参数。

将块封装为 Proc 对象后,我们就可以根据需要随时调用块。甚至还可以将其赋值给实例变量,让别的实例方法去任意调用。

(5)

此外,我们也能将 Proc 对象作为块传给其他方法处理。例如,向call_each方法以外的其他方法----- Array#each 方法 传递Proc对象

技术分享

这样一来,我们就可以非常方便地把调用 call_each 方法时接收到的块,原封不动地传给其他方法------ ary.each 方法

(6)局部变量与块变量

局部变量:如下在块外面定义的变量就是局部变量,x=1,y=1

块变量:块里面的变量,|x|

技术分享

(7)

技术分享

(8)

技术分享

(9)

(1)块变量能更改块之外的局部变量

技术分享

(2)

技术分享

以上是关于块(下)的主要内容,如果未能解决你的问题,请参考以下文章

产品原型设计心得 租房平台原型分享

Axure软件界面及元件

原型工具 Axure RP 9 技巧和资源

axure自定义文本框样式

产品原型浅见

Vue项目实战