Ruby:
Ruby中,一切都是对象,数值、字符串、正则表达式、输入输出、数据库的连接,甚至类本身都是对象。
对象
1. 保有自己的身份
在Ruby中可以使用object_id方法来取得对象的唯一号码。而且Ruby中所有的对象都属于某个类。
对象可以通过调用class方法来确认。
2. 可以接收信息
信息可以被传递给对象。对象接收了信息后,就会运行相应的方法来进行某种处理。从这个意义上说,”信息传递”也被称为“方法调用”
3. 保有内部状态
对象具有0个以上的内部状态。例如,字符串会将其长度作为内部状态来保存,并会在方法的执行过程中发生变化。
例
str1 = "abcdef"str2 = "abcdef"#获取对象idp str1.object_idp str2.object_id#str1所属的类p str1.class#数字1所属的类p 1.class#内容相同,则返回truep str1 == str2#内容相同,但是不是同一个对象,返回falsep str1.equal? (str2)#保有内部状态p str1.length#输出结果#15650964#15650952#String#Fixnum#true#false#6
Ruby —— 是一种快速、简单、面向对象的解释型脚本语言.
An example: fact.rb
def fact(n) if n == 0 1 else n*fact(n-1) endend puts fact(ARGV[0].to_i)
运行:ruby fact.rb 2
#返回 120
运行:ruby fact.rb 50 (计算器中计算时会溢出)
#返回30414093201713378043612608166064768844377641568960512000000000000 --- 正确
当输入命令ruby而不带参数时,它将在标准输入中读入,并在结束输入后执行
C:\Joy\Ruby>rubyputs "Hello World!"^D //Ctrl-DHello World!
Ruby字符串
“”,’’括起来的是Ruby中的字符串
区别:
puts "a\nb\nc" #输出#a#b#cputs 'a\nb\nc'#输出:a\nb\ncputs "abcd #{4*4} efg"#输出: abcd 16 efgputs 'abcd #{4*4} efg'#输出: abcd #{4*4} efg
字符串操作,比C,Java等语言更灵活
#1.连接字符串puts "foo" + "bar"#输出foobar#2.重复字符串puts "foo" * 2#输出foofoo#3.获取字符串中特定字符herb = "parsley"#从0位(第一个字符)开始,获取1个字符puts herb[0,1]#输出p#从-2位(倒数第2个字符)开始,获取2个字符puts herb[-2,2]#输出ey#输出第0位到第3位的4个字符puts herb[0..3]#输出pars#输出倒数第5位到倒数第2位的4个字符puts herb[-5..-2]#输出rsle
Ruby数组
Ruby数组中可以包含不同的对象类型(数据类型)例如: ary = [1, 2, "3"]Ruby数组可以被连接或重复
例如: ary = [1, 2, "3"]ary + ["foo", "bar"] #ary = [1, 2, "3", "foo", "bar"]ary * 2
#ary = [1, 2, "3", 1, 2, "3"] 数组索引ary = [1, 2, "3", 1, 2, "3"]ary[0]
#输出第一个字符--->1ary[0,2]
#输出第一个字符开始的2个字符--->1, 2ary[0..1]
#输出第一个字符和第二个字符--->1, 2ary[-2]
#输出倒数第二个字符--->2 ary[-2,2]#输出倒数第二个字符开始的2个字符--->2, "3"ary[-2..-1]
#输出倒数第二个字符和倒数第一个字符--->2, "3"
Hash
h = {1 => 2, "2" => "4"}{1=>2, "2"=>"4"}h[1]
2h["2"]
"4"结构控制
1) casei=8case iwhen 1, 2..5 puts "1..5"when 6..10 puts "6..10"end#输出6..10
2) while
i = 0puts "It's zero." if i==0 puts "It's negative." if i<0 puts i+=1 while i<3#输出#It's zero.#1#2#3
3) for
for elt in collection # ... here, elt refers to an element of the collectionendfor num in (4..6)puts numend#输出#4#5#6