读<<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是分布式数据处理模型和 ...
随机推荐
- Git发布本地项目至仓库命令行操作流程
1.初始化项目 git init 2.创建名称为 gh-pages 新分支(若直接发布至master分支,忽略此步) git checkout --orphan gh-pages 3.把所有内容加入本 ...
- Java50道经典习题-程序40 字符串排序
题目:根据字符串内字符的ASCII码值对字符串数组进行排序.分析:字符串用ASCII码比较大小,规则是:1.比较首字母的ASCII码大小2.若是前面的字母相同,则比较之后的字母的ASCII码值3.若是 ...
- 关于webapi练习过程中遇到的一系列问题记录
最近在尝试本地进行webapi调用的过程中,遇到一系列的问题,demo很小但着实让人头疼,先附上demo. 前台页面,目的是展示新闻的分类: 类别模型如下: 控制器代码如下: public Actio ...
- C#根据弹窗标题获取窗体句柄并模拟点击按钮(FindWindow,FindWindowEx,SendMessage)
任务:将下面弹窗自动关闭 /// <summary> /// 找到窗口 /// </summary> /// <param name="lpClassName& ...
- sqlserver高版本还原到低版本方法
想要将Sqlserver2014高版本备份的数据还原到低版本SqlServer2008R2上去,但是这在SqlServer中是没法直接还原数据库的,通过以下方法可以顺利还原. 通过高版本生成sql脚本 ...
- 20164305 徐广皓 Exp6 信息搜集与漏洞扫描
信息搜集技术与隐私保护 间接收集 无物理连接,不访问目标,使用第三方信息源 使用whois/DNS获取ip 使用msf中的辅助模块进行信息收集,具体指令可以在auxiliary/gather中进行查询 ...
- 用Oracle的函数,判断点是否在多边形内
转自:http://blog.csdn.net/familyshizhouna/article/details/68944683 参考:http://blog.csdn.net/qwlovedzm/a ...
- 【51nod1847】奇怪的数学题(Min_25筛+杜教筛)
题面 传送门 题解 这题有毒--不知为啥的错误调了半天-- 令\(f(i)={sgcd(i)}\),那么容易看出\(f(i)\)就是\(i\)的次大质因子,用\(i\)除以它的最小质因子即可计算 于是 ...
- day_02 循环格式化输出编码运算符
1.while循环 语法 while 条件: 循环体 else: 当条件不成立的时候执行这里,和break没关系 如果循环是通过break退出的. 那么while后面的else将不会被执行, 只有在w ...
- Mysql5.7.20源码编译安装
一.下载源码包 1.1 下载mysql源码包 MySQL源码,网址为:https://dev.mysql.com/downloads/mysql/ : 1.2 下载boost 下载网址为:http:/ ...