Code blocks
来源:互联网 发布:c语言void的用法 编辑:程序博客网 时间:2024/04/29 18:50
Code blocks是Ruby特有的很强大的特点。
可以通过这个实现回调。
对比
- Java的匿名内部类更加简单。
- 比C语言的指针简单。
两种写作形式
{puts "hello"}
以及:
do club.enroll(person) person.socializeend
比较好的规范是:单行用第一种,多行代码用第二种。
使用方式
在函数调用后面写:
greet {puts "Hi"}
其中greet是函数名,如果该函数有参数,那么参数要出现在代码块(code block)前面。
Ruby中函数没有参数,可以省略括号。
如:
greet("Dave","loyal customer") {puts "Hi"}
这种形式好像就是函数定义了,但注意这里是在Ruby,函数定义不同于C语言或者Java语言。
上面只是说明code blocks放置的位置,其实并没有调用块中的内容。
调用code blocks
学习一个关键字:yield
def call_back puts "Start of method" yield yield puts "End of method"endcall_block { puts "In the block"}
这样一调用函数,在内部有两个声音在喊,调用后面的code block!因为共有两个声音(yield),所以调用两次。
输出结果是:
Start of methodIn the blockIn the blockEnd of method
yield什么
上面的例子中,yield只是喊,但是并没有喊出独特的声音来。既然有这样的发声通道,是不是可以定制化地喊出自己的声音呢?
答案是可以的:为yield提供参数。
def who_says_what yield("Dave","hello") #通过yield喊出自己的声音 yield("Andy","goodbye")endwho_says_what {|person,phase| puts "#{person} says #{phase}"}
通过在yield中定制参数,参数值将会被传递到code block中。
但是code block如何接过来,需要一定的格式。
不同于函数,code block接参数的方式是在两个竖线内。关于这点,有一个很有趣的说明:
有些人认为,这种传递就像是函数传递参数。这样的理解有一定道理,但也并非“全部的故事”。最好将这种方式看作是”coroutine”,运行时控制权在二者之间来回转换。
结合数组一起服用
animals = %w{ ant bee cat dog} #构造一个数组animals.each {|animal| puts animal} #array.each是个函数,后面跟的是code block#输出:antbeecat dog
虽然没有看底层源码,但也可以想到each函数中有yield
,否则不会调用后面的code block。
开吃一些语法糖
['cat', 'dog','horse'].each {|name| print name, " "}5.times { print "*"}3.upto(6) {|i| print i}('a'..'e').each {|char| print char}puts#输出cat dog horse *****3456abcde
注意数字是对象,对象必然自带了一些函数。
0 0
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Code::Blocks
- code blocks
- Code blocks
- Code::Blocks
- 学习使用Code::blocks
- code::blocks debug dll
- Code::Blocks 介绍
- code::blocks汉化
- code::blocks IDE
- Code::Blocks的设置
- Code::Blocks的配色
- Code::Blocks配置
- Code::Blocks安装过程
- 往QStandarItemModel插入数据的正确姿势
- 一.Android单元测试 Mockito的简单用法
- 关于开发中的AppbarLayout问题
- Android播放Gif动态图片的几种方式
- 数字视音频处理知识点小结
- Code blocks
- Ruby中的类与对象(一)
- 代理模式
- 如何遍历某一文件夹下所有图片并切割制作负样本
- centos关机与重启命令详解
- python-c crash
- 【caffe源码研究】第三章:源码篇(10) :ConvolutionLayer
- windows下安装多个mysql5.7.16免安装版版本数据库
- 【LeetCode】 451. Sort Characters By Frequency