ruby编程语言-学习笔记4(第4章 表达式和操作符)
4.6.9 范围 Flip-Flops: ..和...
..和... 操作符不是基于方法的,无法重定义。(优先级比较低)
x+1 .. x*x #可以认为是x+1 至 x*x 的范围
因为操作符的值是一个Range对象, 下面3种表达方式都是一样的
1) x..y
2)Range.new(x,y)
3) Range.new(x,y,true)
表达式 Flip-Flops的值可以是ture/false布尔值
..与...的区别:
当..filp-flops为true时,它返回true,并检验它的右侧表达式以决定是否将其内部状态状态设置回false
对于...filp-flops,则要等到下次求值的时候,才会测试其右侧表达式。
例子
(1..10).each { |x| print x if x==3..x>=3} #先判断x ,返回true/false,然后输出x
结果:3
(1..10).each { |x| print x if x==3...x>=3} #先输出x,再判断x, 然后返回true/false
结果:34
ruby的filp-flops是继承自perl的,perl来源于Unix的awk 和sed(以下有awk、sed的讲解链接)
..类似awk的filp-flops http://coolshell.cn/articles/9070.html
...类似sed的filp-flops http://coolshell.cn/articles/9104.html
http://linux.chinaunix.net/techdoc/develop/2007/02/10/950229.shtml
...有阴暗面。能不用就不用吧.
4.6.10 条件操作符? (三元操作符)
x==3?Y:z # OK, legal
3==x?y:z # synax error, x? 被解释为方法名
(3==x)?y:z #括号解决了(x? 被解释为方法名)的问题
3==x ?y:z #空格也可以解决 ---(x? 被解释为方法名)的问题
若遇上多个?,则从最小的开始判断,(从右到左)
a ? b : c ? d : e #先得出c,再得出a
max = x>y ? x>z ? x : z : y>z ? y:z
4.6.12 define?操作符
define?是一个一元操作符。它测试 其操作数是否已经被定义过。(通常使用未定义的变量和方法,都会产生异常。)
define?对于全局变量,方法,super类、、、、什么的返回值看书。 在P113
define?操作符优先级很低,
define?a and define?b # ok, 检查是否定义了a 和b ,
define?a && define?b # 变成了 (define? (a && define?b ) )
所以尽量清晰点。
4.6.13 语句修饰符
Tips:rescue 左侧表达式的异常,会影响右侧表达式的执行
4.6.14 非操作符 P115
()
[]
{}
.
::
#以下3个是分隔符
; #用于分隔同一行的多个语句
, #逗号, 用于分隔方法参数,数组,hash字面量中的元素
=> #用于hash字面量中,分隔hash键和hash值
: #一个冒号, 用作 符号字面量的前缀 (ruby 1.9 用于hash)
* #展开或拆开数组中的单个元素
& #在方法定义中,将&放在最后一个参数的前面,这会将任何传递给该方法的代码快,赋给该参数。
< #在类定义中,指定当前类的super
ruby编程语言-学习笔记4(第4章 表达式和操作符)的更多相关文章
- ruby编程语言-学习笔记5(第5章 语句和控制结构)
以下是2种表达方式一样. if expression code end if expression then #推荐这种形式 code end expression的值不是false或nil,则cod ...
- ruby编程语言-学习笔记2(第4章 表达式和操作符)
对属性和数组元素的赋值 o.m + = 1 ===>o.m = (o.m()+ 1) # 对 o.m()这个方法的结果+1 对数组元素的赋值也是通过 方法调用来完成. 0.[] = 1 == ...
- ruby编程语言-学习笔记3(第4章 表达式和操作符)
4.6 操作符 了解优先级很重要 位移操作符 (0b1011)<< 1 # ==> "10110" 11 << 1 = 22 ...
- ruby编程语言-学习笔记1
安装完 ruby ri irb ruby-devel 1. 先来个简单的,写个helloworld 给新手们 (terminal中,# 代表root权限,$ 代表用户权限, 前面的就不写了.) # ...
- C++ premier 中文版 学习笔记(第五章 表达式)
解应用和自增组合使用的理解 由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效于*(iter++).子表达式 iter++ 使 iter 加 1,然后返回 iter 原值的副本作为该表达 ...
- 【c++ Prime 学习笔记】第4章 表达式
表达式由一个或多个运算对象组成,对表达式求值返回结果. 字面值和变量是最简单的表达式 把运算符和运算对象组合可得到复杂表达式. 4.1 基础 4.1.1 基本概念 一元运算符作用于一个对象,如取地址符 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...
- 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回
<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回
- 《深入Java虚拟机学习笔记》- 第16章 控制流
<深入Java虚拟机学习笔记>- 第16章 控制流
随机推荐
- iOS 多态的简单思想
/** * 多态:多种形态,是对于对象而言的,如果没有继承就没有多态 * * 在代码中体现:就是通过定义父类指针指向子类的对象 * * 好处:在函数或者方法的参数中如果传入的是父类指针,那么实现的时候 ...
- SharePoint2013TimerJob计时器发送邮件
http://www.3fwork.com/b500/000307MYM008190/
- 今日吐槽20151208.net服务器控件
正文 今天有个小任务是给页面添加一个搜索条件,复选框多选.因为页面都是服务器控件,我也只能用服务器控件配合了.然后给页面加了一个 CheckBoxList 控件.后台通过数据表加载数据. fore ...
- React Native在虚拟运行app时,报错RCTRootView not found,怎么解决?
报错: 解决方案:
- springdata整合mongodb一些方法包括or,and,regex等等《有待更新》
这几天接触mongodb以及springdata,自己英语比较戳,所以整理这些方法花的时间多了点,不过也是我第一次在外国网站整理技术 不多说,直接上代码,这里只是给出一些操作方法而已,如果有需要源码的 ...
- phpcms v9后台多表查询分页代码
phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...
- 我写了个教程《一步步教你把ubuntu安装到U盘》
一步步教你把ubuntu安装到U盘 作者 Val 2452013147@qq.com 原因: 由于某些原因(学生党),需要把ubuntu安装到U盘到处走,百度了一下,教程都不是很好,要么很复杂,要么不 ...
- python AES 加密与解密
#用aes加密,再用base64 encode def aes_encrypt(data): from Crypto.Cipher import AES import base64 key=setti ...
- listview滚动时背景闪烁,背景黑或白问题解决
android在使用listview时出现滚动时背景闪烁,变成背景黑或白的问题这样处理: 1:在布局文件中listview标签中加入: android:cacheColorHint="#00 ...
- iOS 8 定位失败问题
首先plist定义两个string: NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription 然后调用 [self. ...