- 浏览: 620226 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
oldrat:
引用Special cases aren't special ...
武汉大学开源技术俱乐部 技术交流 第1期 -
yzsunlight:
试了试 ,不行
Android Studio SDK Manager无法正常下载如何设置 -
qianjigui:
更全面的文档:http://www.5wpc.info/it/ ...
Ruby正则表达式操作参考 -
qianjigui:
Anddy 写道Anddy 写道tag是自动创建的吗? 能手动 ...
vim的跳转 -
Anddy:
Anddy 写道tag是自动创建的吗? 能手动创建吗? 在sh ...
vim的跳转
个人感觉《Ruby程序设计语言》确实是一本好书,它将Ruby的枝枝节节都点到了。
在这里,我从自己的一些心得出发,对Ruby语言的操作符做个读书笔记式的小结。
欢迎补充......
运算符一览表(注意从上到下优先级依次降低 ):
运算符 | 作用的运算数数目 | (左/右)结合律 | 是否可以重新定义 | 具体操作含义 | 备注 |
! ~ + | 1 | 右 | 可以 | 逻辑取否,位运算取反,算术取正(正号) |
在Ruby1.9中重新定义正号时使用 +@. ~x=-x-1. !在Ruby1.9中可以重新定义,1.8中不行. |
** | 2 | 右 | 可以 | 这个运算和我们数学上的幂运算是一致的。 | 符合右结合律: x**y**z == x**(y**z) |
- | 1 | 右 | 可以 | 算术取负(负号) | 在Ruby1.9中重新定义正号时使用 -@.优先级和“正号”不同 |
* / % | 2 | 左 | 可以 | 算术乘法/字符串重复/数组操作、除法(根据类型的不同可能会表现出取整的效果)、取余数 |
整数除法:取整 , 整数/0 raise ZeroDivisionError 正浮点数/0 = Infinity 负浮点数/0 = -Infinity 0.0/0 = NaN
irb(main):001:0> a=[0]
irb(main):004:0> a='.'
|
+ - | 2 | 左 | 可以 | 算术加法/字符串连接/数组合并、算术减法/数组差 | irb(main):001:0> a=[1,2,3] => [1, 2, 3] irb(main):002:0> b=[4] => [4] irb(main):003:0> c=a+b => [1, 2, 3, 4] irb(main):004:0> c-=b => [1, 2, 3] |
<< >> | 2 |
左 |
可以 |
位运算左移/字符串添加/数组添加,位运算右移 | irb(main):001:0> a='first' => "first" irb(main):002:0> a<<'second' => "firstsecond" irb(main):003:0> a => "firstsecond" irb(main):004:0> a=[] => [] irb(main):005:0> a<<'one' => ["one"] irb(main):006:0> a<<'two' => ["one", "two"] irb(main):007:0> a => ["one", "two"] |
& |
2 |
左 |
可以 |
位运算和AND/数组交Intersection |
irb(main):001:0> (0b1010 & 0b1100).to_s(2) => "1000" TrueClass,FalseClass,NilClass同样定义了&,|,^.用于Boolean运算 ,但是这并不是一个正确的方法.&&,||用于逻辑运算时存在短路 现象,而位操作符没有. |
| ^ | 2 | 左 | 可以 | 位运算或OR/数组并Union,异或XOR | irb(main):001:0> (0b1010 & 0b1100).to_s(2) => "1000" irb(main):002:0> (0b1010 | 0b1100).to_s(2) => "1110" irb(main):003:0> (0b1010 ^ 0b1100).to_s(2) => "110" irb(main):001:0> a=[1,2,3] => [1, 2, 3] irb(main):002:0> b=[2,3,4] => [2, 3, 4] irb(main):003:0> a+ b => [1, 2, 3, 2, 3, 4] irb(main):004:0> a| b => [1, 2, 3, 4] irb(main):005:0> a- b => [1] irb(main):006:0> a& b => [2, 3] |
< <= >= > | 2 | 左 | 可以 | 大小顺序判断:小于/继承(类间关系),小于等于,大于等于,大于/泛化(类间关系) | data大小顺序关系:数值、字符串、日期。类层次关系,父子关系,非父子关系 irb(main):001:0> String < Object => true irb(main):002:0> Object>Numeric => true irb(main):003:0> Numeric<Integer => false irb(main):004:0> String<Numeric => nil |
== === != =~ !~ <=> | 2 |
直接结合,无所谓左右结合律。如果在一个表达式中出现了多个此类符号必需使用小括号'(',')'隔开。 irb(main):001:0> true==false==false |
可以 |
==以左操作数为基准测试相等,!=返回==的取反值,===主要用于case-when语句中的匹配操作,=~用于模式匹配操作判断,!~是=~取反。
<=>是一个通用的大小判断操作,很多时候比较操作都是在本操作基础上做一些修饰。 a<=>b :值 返回值
|
关于对象的相同操作:
|
&& | 2 | 左 | 不能 | 逻辑与 |
在Ruby的Boolean表达式中,expression表现出逻辑非时只有两种情况(false, nil),其它任何状况下均为true. 特殊的表示: irb(main):001:0> x=true |
|| | 2 | 左 | 不能 | 逻辑或 | 优先级低于 && |
.. ... | 2 |
只能 是两个数据。 irb(main):001:0> 1..2...3 |
不能 | 区间/flip-flop开闭表达式 |
区间包含字面量区间(1..3, 1...4)和变量区间(x..x*x, x+1...x+x*x). 关于开闭表达式有记忆 属性: irb(main):001:0> (1..10).each{|x| p x if x==3..
x>=3}
$stateTwoPoint = false #exp1..exp2 def flipflopTwoPoint(exp1,exp2) if !$stateTwoPoint result = exp1 if result $stateTwoPoint = ! exp2 end result else $stateTwoPoint = ! exp2 true end end $stateThreePoint = false #exp1...exp2 def flipflopThreePoint(exp1,exp2) if !$stateThreePoint $stateThreePoint = exp1 else $stateThreePoint = ! exp2 true end end 以上的exp1,exp2都是逻辑表达式,每次运行时都要重新计算。 |
?: | 3 | 右 | 不能 | 三目条件表达式 |
expression ? valueLeft : valueRight if expression then valueLeft else valueRight end
满足右结合律: a ? b:c?d:e等同于 a?b : (c?d:e) |
rescue | 2 | 左 | 不能 | 错误恢复 |
Rescue 语句修饰句 写道
一个语句可以有个可选的rescue修饰句跟在另一个语句后面(来扩展另一个rescue修饰句,等等)。Rescue修饰句不接受异常参数,它挽救StandardError和它的子类。
如果一个异常在rescue修饰句的左侧被引发,左侧的语句被放弃,全部行值是右边语句的值。 |
= **= *= /= %= += -= <<= >>= &&= &= ||= |= ^= | 2 | 右 | 不能 | 赋值语句 | 赋值语句 |
defined? | 1 | 可以看成一个method 方法/行为 | 不能 | 测试变量和类型等是否定义 | 如果没有定义则返回nil,已经定义则返回字符串(情况比较复杂,在这里不做讨论) |
not | 1 | 右 | 不能 | 逻辑非 | 比!优先级低 |
and or | 2 | 左 | 不能 | 逻辑与、逻辑或 |
比&&,||优先级低。即 defined? a and defined? b #等同于 (defined? a) and (defined? b) defined? a && defined? b #等同于 defined? ((a && (defined? b))) |
if unless while until | 2 |
特殊 修饰词 大体格式是 待执行语句 XXX(关键字) 条件 |
不能 | 条件/循环修饰语句 |
statement if expression #expression为真则执行statement statement if expression #expression为假则执行statement statement while expression #expression为真则循环statement statement while expression #expression为假则循环statement
|
发表评论
-
Ruby 2.1 GC策略
2014-01-23 11:30 937对象管理主要涉及: Profiling support ... -
Ruby 动态特性鉴赏
2013-12-26 16:47 1330以下代码与代码学习来自<Ruby Best Prac ... -
Ruby: stack level too deep (SystemStackError)
2012-06-21 15:13 1181http://dalibornasevic.com/posts ... -
Ruby正则表达式操作参考
2012-02-02 10:03 3573在线测试工具: http://www ... -
Ruby二进制文件转码到Base64并通过Post进行提交
2011-02-08 07:28 1818ruby -v 写道 ruby 1.8.7 (2010-01 ... -
Ruby中的预定义变量
2010-12-10 07:00 1603原文地址 Predefined Variab ... -
在Ruby旧版本上进行升级
2009-05-18 15:51 7365由于ruby的内存泄漏很严重,我在网上也找到了不少资料,为了利 ... -
有根路由
2009-04-22 18:41 1068ActionController::Base.asset ... -
ROR常用正则表达式
2009-04-07 15:38 1139Valid email? Validate email add ... -
./script/generate salted_login.... Error
2009-03-30 11:31 1158错误信息 写道 ./script/ge ... -
ROR遗忘命令黑板
2009-02-11 11:22 1146对于安装了多个rails版本的情况,需要生成特定版本的rail ... -
《Ruby程序设计语言》 第一章 学习笔记
2008-12-13 00:16 1008这一章是一个全面的基本的介绍。 Ruby是一个前大的动态语言, ... -
in_place_editing使用小记
2008-12-12 23:23 1222in_place_editing是一个用于原地编辑的ajax小 ... -
vim ruby
2008-12-04 22:43 2865http://www.g0574.com/viewthread ... -
ActiveRecord是什么&元编程简介
2008-11-30 00:07 1553回复:什么是ActiveRecord ActiveRecor ... -
Ruby中的block与变量作用域
2008-11-29 22:55 1103按照我们一般的思维模 ... -
Ruby的函数调用与super
2008-11-22 03:36 5646最近在巩固Ruby 的基本语法知识,在这里把以前一些不知道的特 ... -
Ruby的运算符!和数据类型Numbers小结
2008-11-18 16:07 1974这篇文章应该是承接 SSD06 Exercise02 个人解答 ... -
Ruby and Rails Development for Visual Studio
2008-10-09 18:04 1245我下了一个适用于VS2005的,欢迎大家下载使用。 ... -
Ruby 函数参数多余的空格和括号
2008-04-06 20:43 1770warning: parenthesize argumen ...
相关推荐
1.6 本章小结 4 第一篇 入门篇 第2章 Hello Grails 6 2.1 Grails的安装 6 2.1.1 JDK的安装与配置 6 2.1.2 Grails的安装 7 2.2 创建Grails工程 8 2.3 Grails的MVC架构 11 2.4 Scaffold应用程序 14 2.5 开发工具的...
1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 ...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
- `<ruby>` 和 `<rt>`: 用于展示注音。 - `<small>`: 显示小字体。 - `<time>`: 显示日期和时间。 - `<details>` 和 `<summary>`: 创建可折叠的详细信息块。 - `<progress>`: 显示进度条。 - `<datalist>` 和 ...
输出:`{'jen': 'python', 'sarah': 'c', 'edwoad': 'ruby'}` 5. **遍历字典**: - 可以通过`items()`方法遍历字典中的所有键值对: ```python for key, value in favorite_numbers.items(): print("key:", ...
5.8 JavaScript语句小结 第6章 对象 6.1 创建对象 6.2 属性的查询和设置 6.3 删除属性 6.4 检测属性 6.5 枚举属性 6.6 属性getter和setter 6.7 属性的特性 6.8 对象的三个属性 6.9 序列化对象 6.10 对象方法 第7章...
小结... 16 可选项元素... 17 其他量词:重复出现... 18 括号及反向引用... 20 神奇的转义... 22 基础知识拓展... 23 语言的差异... 23 正则表达式的目标... 23 更多的例子... 23 正则表达式术语汇总... ...
5.8 JavaScript语句小结 第6章 对象 6.1 创建对象 6.2 属性的查询和设置 6.3 删除属性 6.4 检测属性 6.5 枚举属性 6.6 属性getter和setter 6.7 属性的特性 6.8 对象的三个属性 6.9 序列化对象 6.10 对象方法 第7章 ...
5.8 JavaScript语句小结 第6章 对象 6.1 创建对象 6.2 属性的查询和设置 6.3 删除属性 6.4 检测属性 6.5 枚举属性 6.6 属性getter和setter 6.7 属性的特性 6.8 对象的三个属性 6.9 序列化对象 6.10 对象方法 第7章 ...