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章 表达式和操作符)的更多相关文章

  1. ruby编程语言-学习笔记5(第5章 语句和控制结构)

    以下是2种表达方式一样. if expression code end if expression then #推荐这种形式 code end expression的值不是false或nil,则cod ...

  2. ruby编程语言-学习笔记2(第4章 表达式和操作符)

    对属性和数组元素的赋值 o.m + = 1  ===>o.m = (o.m()+ 1)  # 对 o.m()这个方法的结果+1 对数组元素的赋值也是通过 方法调用来完成. 0.[] = 1 == ...

  3. ruby编程语言-学习笔记3(第4章 表达式和操作符)

    4.6 操作符 了解优先级很重要 位移操作符 (0b1011)<< 1       #   ==> "10110"      11 << 1 = 22 ...

  4. ruby编程语言-学习笔记1

    安装完 ruby ri irb ruby-devel 1. 先来个简单的,写个helloworld  给新手们 (terminal中,# 代表root权限,$ 代表用户权限, 前面的就不写了.) # ...

  5. C++ premier 中文版 学习笔记(第五章 表达式)

    解应用和自增组合使用的理解 由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效于*(iter++).子表达式 iter++ 使 iter 加 1,然后返回 iter 原值的副本作为该表达 ...

  6. 【c++ Prime 学习笔记】第4章 表达式

    表达式由一个或多个运算对象组成,对表达式求值返回结果. 字面值和变量是最简单的表达式 把运算符和运算对象组合可得到复杂表达式. 4.1 基础 4.1.1 基本概念 一元运算符作用于一个对象,如取地址符 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  8. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  9. 《深入Java虚拟机学习笔记》- 第16章 控制流

    <深入Java虚拟机学习笔记>- 第16章 控制流

随机推荐

  1. A Case for Flash Memory SSD in Enterprise Database Applications

    通过分析固态硬盘的特性对数据库中不同对象,如:表,索引,回滚段,重做日志等的应用进行具体研究,最后将数据库中不同的对象进行区别应用

  2. MSChart实例

    MSChart是VS中自带的图表控件,功能比较强大,效果也比较丰富.下面只提供一个例子,以供新接触的朋友参考. 先看下效果图: 看完效果图上代码啦. 使用这个控件需要先在页面注册一下. <%@ ...

  3. jquery 100%全屏自适应宽可点击左右和焦点的自动切换幻灯片特效

    http://www.divcss5.com/css-texiao/texiao717.shtml http://d.divcss5.com/divcss5/down/2014062201.zip

  4. PHP+Ajax 异步通讯注册验证

    HTML代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  5. Python 的格式化字符串format函数

    阅读mattkang在csdn中的博客<飘逸的python - 增强的格式化字符串format函数>所做笔记 自从python2.6开始,新增了一种格式化字符串的函数str.format( ...

  6. 软件测试 -- Bug等级划分规范

    1. Blocker级别——中断缺陷 客户端程序无响应,无法执行下一步操作. 2. Critical级别――临界缺陷,包括: 功能点缺失,客户端爆页. 3. Major级别——较严重缺陷,包括: 功能 ...

  7. 判断触摸的点在那个 View上

    UIView *touched = [self.view hitTest:pt withEvent:event]; Uiview *touchView = [pt  view];

  8. 基于Mahout的电影推荐系统

    基于Mahout的电影推荐系统 1.Mahout 简介 Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域 ...

  9. DOS系统里,分屏显示目录的命令是什么??

    dir /sdir /pdir /w 我记得这三个都是我当年常用的命令,有分瓶的,有滚动时候每页停顿的,还有去掉详细信息的吧,, 可以放在一起使用.如dir /p/w /p是滚动时候中间停顿的,/w是 ...

  10. U盘、移动硬盘提示格式化的处理

    移动硬盘突然打不开了,一点击就提示要求格式化,这种问题本人亲历,现已解决,千万别格式化,千万别格式化,用系统自带磁盘恢复 CHKDSK命令即可解决此问题 方法/步骤 1.在开始菜单找到“运行”窗口,也 ...