- 浏览: 99423 次
- 性别:
- 来自: 合肥
最新评论
-
helloqidi:
谢谢,学习了。
娃娃鸭学Ruby-34、可枚举的对象
文章列表
表达式就是一块Ruby 代码。
在许多语言区分低层的表达式和高层的语句,如条件和循环
Ruby 表达式和语句之间并没有清晰的界限。
字面量和关键字字面量
某些Ruby关键字是基本表达式,可以把它们当作关键字字面量或特殊形式的变量引用:
nil 求值为nil,属于NilClass类
true TrueClass类的单例实例,代表了布尔值为true的对象
false FalseClass false
self 当前对象
__FILE__ ...
对象
Objects
Ruby是纯粹的面向对象的语言:所有的值都是对象,而且没有基本类型和对象类型的区别。
所有对象都继承一个Object类,共享此类中的方法
1、对象引用
在Ruby中使用对象时,其实是在使用对象的引用。
s="Ruby"
t=s #只是引用,t和s指向同一个值
t[-1]="" # 修改t 同时修改s
print s # "Rub"
t="Java" #这时t指向另一对象
print s,t # Prints "RubJava"
在Ruby中,当把一个对象传递给一个方法 ...
True、False和Nil
true,false 和nil是Ruby的关键字
true
false
nil是一个保留值,用于表示没有值
Singleton
true是TrueClass的一个单键实例
false FalseClass
nil NilClass
nil值检测
o==nil
o.nil?
2011-4-7 20:28 danny
符号
Symbols
Ruby解释器的典型实现会维护一个符号表(symbol table),在这个表中,存储了其所知晓的所有类、方法及变量的名称。
通过一个方法名在符号表中的位置来对其进行引用。将相对开销较大的字符串操作转化为一个开销较小的整数操作。
:symbol
:"symbol" #以上两相同
:'another long sysmbol'
s="string"
sym=:"#{s}"
%s 字面量
%s["] # same as :'"'
在反射机制(reflective code)里,符号常常被用 ...
范围
Ranges
表示位于一个开始值和一个结束值之间的一些值。
开始和结束值之间放置二三个点,如果使用两个点,该范围包含边界
超过三个点,结尾点不包含在内
1..10 #包含10
1.0...10.0 #不包含10.0
include?方法测试一个值是否被包含在一个范围内
cold_war=1945..1989
cold_war.include?birthdate.year
<=>
r='a'..'c'
r.each{|l| print "[#{l}]"} # prints "[a][b][c]"
r.step(2){|l| prin ...
哈希
键值对
映射(map)
关联数组
numbers=Hash.new
numbers["one"]=1
numbers["two"]=2
numbers["three"]=3
sum=number["one"]+number["two"]
1、哈希字面量
逗号分隔的键/值对,被包含在花括号中
numbers={"one"=>1,"two"=>2,"three"=>3}
Symbol对象方法
number ...
数组
一个数组就是一系列的值,可以通过这些值在该序列中的位置或索引来访问它们。
Ruby中
数组的第一个值的索引为0
size和length方法返回一个数组的元素个数,
最后一个元素的索引是size-1
负索引从数组的末尾开始计数
-1 表示数组的最后一个元素,倒数第二个为-2
越界 返回nil,不抛出异常
Ruby数组是无类型且可变的
数组元素不必属于同一个类型,可随时改变
数组的大小可以动态改变 向数组添加元素,数组会按需增长
超出数组末尾的元素进行赋值,数组将会自动增长,用nil来填充多出的位置(超出数组开头 ...
5、对字符串进行迭代
Ruby1.8
String 类 each方法,Enumerable模块
[]
Ruby1.9
取消了each方法,不再包含Eumerable模块。
取代的:
each_byte
each_char
each_line
s="¥1000"
s.each_char{|x| print "#{x} "} # "¥ 1 ...
2、字符字面量
字符前面加一个问号的方式表示单个字符构成的字面量,不需要使用任何形式的引号
?A
?"
??
Ruby 1.8
?A=65
Ruby 1.9
字符是长度为1的字符串
因此或以Unicode码点
3、字符串操作符
+
planet="Earth"
"Hello"+" "+planet # Hello Earth
同Java区别,不会自动转换
在Ruby中,采用字符串内插操作比采用+操作符进行连接更简单。
"Hello planet ##{planet_number}"
< ...
Ruby使用String类的对象表示文本。
字符串是可变的对象
定义了 提取字符串、插入和删除文本,搜索及替换等操作
1、字符串字面量
由单引号引用的字符串字面量
被单引号所引用的字符串是形式最简单的字符串字面量,单引号之间的文本就是字符串的值。
'This is a simple Ruby string literal'
要用到单引号('),前面放置一反斜线,反斜线转义再加一个反斜线就可以了。
'Won\'t you read O\'Reilly \'s book?'
'This string literal ends with a single backslash:\\' ...
Ruby中所有的值都是对象。
继承关系
Numeric
|
________________________|__________________________________________________
| | ...
Ruby程序的运行
Ruby是一门脚本语言,意味着Ruby程序就是待执行的语句的列表或脚本。
默认情况下,语句按照其出现顺序依次的执行。
在Ruby中不存在一个作为程序运行入口点的main方法。
Ruby接受一个待执行语句的脚本,然后从第一行代码开始一直执行到最后一行。
常见的作法是指定一个包含脚本的文件名,
Ruby解释器会读取文件并执行其中的脚本,它首先执行任何BEGIN块,然后再从文件的第一行开始执行,直到发生以下情况:
×它执行了一个导致Ruby程序终结的语句
×它到达了文件的结尾
×它读入一行代码,此代码用标记__END__标示了文件的逻辑结尾
通常情况下(除非调用了exit! ...
在最底层,Ruby程序是采用ASCII字符集编码的。
默认情况下,Ruby解释器假定Ruby源代码是采用ASCII进行编码的,但Ruby程序并不是必须要采用ASCII编码方式。
可以采用多种编码
1、指定程序所使用的编码
默认编码:ASCII
在Ruby1.8里 ...
文件结构的规则
1、如果一个Ruby程序包含有"shebang"注释,那么该注释是第一行。#! 注释 为了指示(Unix类)操作系统如何执行该文件的。
2、如果一个Ruby程序包含一个"coding"注释,而且不包含"shebang"注释,那么该"coding"注释就应该出现在第一行;否则,由于有"shebang"注释必须出现在第一行,所以"coding"注释就只能出现在第二行。
3、如果一个文件包含一行代码,该行代码仅包含一个__END__标记,而且在此标记前后均无空白符,那 ...
6.1表达式
初级表达式
数字和字符串字面量就是初级表达式
特定关键字:true false nil self
对变量的引用也是初级表达式,对它们进行求值的结果就是指向的变量的值。
复合表达式
[1,2,3] #数组
{1=>"one",2=>"two"} #Hash
1..3 # A Range literal
操作符用于对多个值进行计算,通过操作符来组合更简单的子表达式构成复合表达式
1 #初级表达式
x #另一初级表达式
x=1 #赋值
x=x+1 #两个操作符的表达式
语句
表达式和Ruby的关键字联合起来构成语句。
if ...