Ruby在OO(面向对象,object oriented)上很彻底。在学Python时你会发现object.size()和len(object)两种表示方法,但是在Ruby中并没有len()这样的所谓的built-in function,方法的调用多类似于前者。
Ruby中才是真正的“万物及对象”。
赋值格式
变量名 = 对象
特殊类型
nil :不存在
简单的方法:类型转换
object.to_$
$是类型缩写,比如
puts 2.to_s
就可以把2转换成字符串打印(虽然结果差不多)。
基本对象类型
1.数值
Ruby中数值也是对象,分为Fixnum类(整数)和Float类(浮点数)。
最神奇的也是最经典的一个实例再展示一遍
#输入
3.times { puts "haha" }
#输出
haha
haha
haha
简单的运算
#输入
a = 1 + 1
b = 2 / 3
c = 2 ** 2
d = 5 - 3.14
puts "Result : #{a},#{b},#{c},#{d}"
#输出
#最后的输出和浮点数在Ruby底层的运算有关
Result : 2,0,4,1.8599999999999999
可以使用..来表示一个长度范围内的数字的集合,这是Range类型的对象,在此不再多序。
#输入
puts 1..5
for i in 1..5
puts "haha"
end
#输出
1..5
haha
haha
haha
haha
haha
数值对象更多信息可以查阅文档。
2.字符串
Ruby中字符串可以使用单引号或者双引号,但是存在差异。
#输入
print('Hello, \nRuby\n!\n')
puts "-----"
print("Hello, \nRuby\n!\n")
print('Hello, \\ \'Ruby\'.')
#输出
Hello, \nRuby\n!\n-----
Hello,
Ruby
!
Hello, \ 'Ruby'.
单引号里换行符等特殊字符不经转义,但是要是想打印出单引号和斜杠还是要加斜杠。
3.符号
符号貌似和字符串很像,符号是由:和字符串紧挨着构成的。
#输入
a = :b
puts a
p a
#输入
b
:b
有了字符串为什么还有符号这种类型?
下面的这两个博客中说的比较详细。感谢besfanwei的精彩讲述。
- http://blog.csdn.net/besfanfei/article/details/7966850
- http://blog.csdn.net/besfanfei/article/details/7966987
后面的笔记中会提到部分符号的用法。
4.数组
数组是按序保存对象的对象,是基本的容器。Ruby中的数组可以保存不同类型的对象。
#输入
info = ["name",1,:haha]
print info
#输出
["name", 1, :haha]
也可以声明一个空数组
names = []
Ruby 中数组下标/序从0开始,可以通过赋值改变数组的内容
#输入
info = ["name",1,:haha]
puts info[0]
puts info[1]
puts info[2]
puts info[3]
print info
puts " "
info[1] = 2
puts info[1]
info[5] = "aloha"
print info
可以看出下标1处值已更改。
有意思的是给下标是5处赋值时,本来没值的3,4处会生成nil值填补。
#输出
name
1
haha
# ->无值,打印nil值
["name", 1, :haha]
2
["name", 2, :haha, nil, nil, "aloha"]
可以通过.size方法得到数组长度。
>> info.size
=> 6
可以使用块(block)遍历数组,也可以使用 for等循环结构遍历。
#输入
info.each do |n|
print n,"-"
end
.each方法是一个带块方法,得到了数组的每一个值并且可以使用块来操作。块中的变量n为块变量,每一个值都依次赋给了n。块在之后的笔记中会提到。
可以看出,不存在的值就没有打印
#输出
name-2-haha---aloha-
5.散列
散列类似于Java中的Map,Python中的字典。
散列里面储存着各种键值对。符号字符串数值都可以称为键/值,但是符号为键的情况较为一般。
#声明一个空的散列,非必需
address = {}
#让address有具体内容
address = { :country => "China","province" => :AH ,1 => 1111 }
取值时一定要在中括号中正确表明键的类型
#以下为错误示例 ,均会报错
address[country]
address[province]
address[:1]
#以下也为错误示例,但不报错,返回nil
address["1"]
address[:province]
#为何上面出现了两种不同结果之后再作说明。
#
#正确的取值方式
puts address[:country]
puts address["province"]
puts address[1]
散列也可这样声明,仅限键为符号类型
age = {name: "Sato",year: 15}
散列和数组类似,都是动态的,可以通过以下方式加入新键值对。
假如已存在,会进行替换
age["haha"] = 3
散列也有.each方法,与数组类似,块变量含有两个,也就是键&值
#输入
address.each do |key,value|
puts "#{key}-#{value}"
end
#输出
country-China
province-AH
1-1111
5.正则表达式
处理正则表达式是Ruby的一大优势,但是Ruby却在数据业没有崛起比较可惜。
/模式/ =~ 希望匹配的字符串 # =~两者紧密相连
上式返回一个具体的数值,代表匹配的位置。
#输入
a = /Ruby/i
puts (/Ruby/ =~ "Ruby")
puts (/Ruby/ =~ "ruby")
puts (a =~ "ruby")
puts (/Ruby/ =~ "This is my Ruby")
而且加上i不区分大小写
#输出
0
# -> nil
0
11
参考及引用资料
本人不会将以下资料用于商业用途并对其于自己的帮助表示由衷的感谢。
- <>
- http://blog.csdn.net/besfanfei/article/details/7966850
- http://blog.csdn.net/besfanfei/article/details/7966987