读<<programming ruby>> 7.6节 flip-flop 理解
书中源码是这样的
File.foreach('1.txt') do |x|
if(($. == 1) || x =~ /eig/) .. (($. == 3) || x =~ /nin/) then
print x
end
end
其中 1.txt内容如下
first
second
third
fourth
fifth
sixth
seventh
eigth
ninth
tenth
按道理 读取第一行的first,$.应该是1 ($.是一个全局变量,表示行号)但是rubymine调式发现不是1,这个我暂时没找到原因。所以经别人提示。我改成这样
f = File.new('1.txt')
f.each do |line|
if ((f.lineno == 1) || line.chomp =~ /eig/)..((f.lineno== 3) || line.chomp =~ /nin/) then
print f.lineno
print line
end
end
这样 f.lineno表示每次读取的行号 运行测试结果如下

书上只提到2点,
1 exp1..expr2这样的rang, 在exp1变为真之前,它的值为假,在exp2变为真正之前,rang被求解为真
2 这段代码片段。就是打印1到3行及位于/eig/和/nin/之间
有点晦涩难懂,然后群里有人提示,看这个文章: http://nithinbekal.com/posts/ruby-flip-flop/
The flip flop operator is a range (..) operator used between two conditions in a conditional statement. It looks like this:
(1..20).each do |x|
puts x if (x == 5) .. (x == 10)
end
The condition evaluates to false every time it is evaluated until the first part evaluates to true. Then it evaluates to true until the second part evaluates to true. In the above example, the flip-flop is turned on when x == 5 and stays on until x == 10, so the numbers from 5 to 10 are printed.
(x == 5) .. (x == 10) 这个东西叫做flip flop
1 蓝色英文就是说,当第一部分也就是(x==5)为真的时候。整个if判断为真,但是什么时候为假呢。直到第二部分为真也就是(x==10)时候,
也就是前面提到的 exp1..expr2这样的rang, 在exp1变为真之前,它的值为假,在exp2变为真正之前,rang被求解为真
2 红字英文意思就是 x==5时,这个表达式开始执行。什么时候停止呢,知道x==10,所以打印5到10之间
所以理解
((f.lineno == 1) || line.chomp =~ /eig/)..((f.lineno== 3) || line.chomp =~ /nin/)
可以这么想,当f.lineno 值为1的时候 这个表达式 ((f.lineno == 1) || line.chomp =~ /eig/) 为真,整个if 为真,
然后打印 1first,什么时候打印终止?,当flineno=3或者line.chomp(chomp去掉行尾的/r/n)的值匹配/nin/,他们两个满足其中一个的时候 就不打印了。
可以像下面代码这样理解
f = File.new('1.txt')
f.each do |line|
if ((1..3).include?f.lineno) or (line =~ /eig/ or line =~ /nin/) then
print f.lineno
print line
end
end
读<<programming ruby>> 7.6节 flip-flop 理解的更多相关文章
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- programming ruby
ri #rdoc reader attr_reader attr_writer @@xx 类变量都是私有的 def 类名.xx end 类方法 [1,3,5,7].inject(0){|sum,e| ...
- 对The C programming language一书第6.6节代码的理解
代码如下(基本与书中一致) 1 #include <stdio.h> 2 #include <string.h> 3 #include <ctype.h> 4 #i ...
- Programming Ruby 阅读笔记
在Ruby中,通过调用构造函数(constructor)来创建对象 song1=Song.new("Ruby") Ruby对单引号串处理的很少,除了极少的一些例外,键入到字符串字面 ...
- Linux中文件描述符fd和文件指针flip的理解
转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通 ...
- [转载] linux中文件描述符fd和文件指针flip的理解
转载自http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通 ...
- ruby中迭代器枚举器的理解
参考<ruby编程语言>5.3迭代器和可枚举对象 迭代器一个迭代器是一个方法,这个方法里面有yield语句,这个方法里的yield语句,与传递给这个方法的块进行数据传输 yield将数据传 ...
- Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解
一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...
- 小记---------Hadoop读、写文件步骤,HDFS架构理解
Hadoop 是一个开源框架,可编写和运行分布式应用处理大规模数据 Hadoop框架的核心是HDFS 和 MapReduce HDFS是分布式文件系统(存储) MapReduce是分布式数据处理模型和 ...
随机推荐
- 解决批处理命令执行完毕后自动关闭cmd窗口方法
问题描述: 日常开发工作中,为了节省多余操作导致浪费时间,我们经常会自己建一些批处理脚本文件(xx.bat),文件中包含我们需要执行的命令,有时候我们希望执行完毕后看一下执行的结果,但是窗口执行完毕后 ...
- Mac 使用 NFS 连接 Centos 上的共享文件夹
Mac 使用 NFS 连接 Centos 上的共享文件夹 NFS介绍 网络文件系统(Network File System,NFS),一种使用于分散式文件系统的协议,由升阳公司开发,于1984年向外公 ...
- ComicEnhancerPro 系列教程
这个系列教程实在太长了,图又多,所以我不认为它适合发布在博客上.目前最新版采用CHM格式发布,就放在置顶随笔提供的网盘里,与ComicEnhancerPro在一起.
- SQLServer存储引擎——04.数据
4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...
- Repeater控件的分隔线
在Repeater控件中,很容易实现在行与行之间使用分隔线.因为此控件有内置的SeparatorTemplate模版.举个例子吧: 运行时,可以看到效果: 说句实在的话,Insus.NET做一条水平线 ...
- Mysql 5.6主从搭建
mysql设置主从的重要性和必要性不必多说,下面开始详细说明如何搭建主从. 1.主服务器上创建一个用于复制的账户. mysql'; mysql> flush privileges; 2.主服务器 ...
- CAT部署集成文档
1. 下载编译 1.1 下载源码 首先,到项目的git网页下载整个项目: https://github.com/dianping/cat 1.2 打包安装 接着就是进入这个项目的目录,运行打包安装命 ...
- Nginx+ISS+Redis实现完美负载均衡
前篇文章讲到nginx是使网站采用分布式,对用户的请求采用分布式,分配到不同的服务器上,然后进行同一站点的访问,保证了访问的高效,使用率高,生命期长. 说到ISS,这里重点介绍tomcat,Tomca ...
- JavaScript之DOM HTML
前言 JavaScript这门语言在一定程度上让我们html之间耦合度降低了,为什么这样说呢?JavaScript语言一样可以可以随意写入html页面一些东西,比如:JavaScript的DOM可以改 ...
- P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...