Ruby:
Ruby中,一切都是对象,数值、字符串、正则表达式、输入输出、数据库的连接,甚至类本身都是对象。
对象
1. 保有自己的身份
在Ruby中可以使用object_id方法来取得对象的唯一号码。而且Ruby中所有的对象都属于某个类。
对象可以通过调用class方法来确认。
2. 可以接收信息
信息可以被传递给对象。对象接收了信息后,就会运行相应的方法来进行某种处理。从这个意义上说,”信息传递”也被称为“方法调用”
3. 保有内部状态
对象具有0个以上的内部状态。例如,字符串会将其长度作为内部状态来保存,并会在方法的执行过程中发生变化。
例
str1 = "abcdef" str2 = "abcdef" #获取对象idp str1.object_id p str2.object_id #str1所属的类 p str1.class #数字1所属的类 p 1.class #内容相同,则返回true p str1 == str2 #内容相同,但是不是同一个对象,返回false p 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) end end puts fact(ARGV[0].to_i)
运行:ruby fact.rb 2
#返回 120
运行:ruby fact.rb 50 (计算器中计算时会溢出)
#返回30414093201713378043612608166064768844377641568960512000000000000 --- 正确
当输入命令ruby而不带参数时,它将在标准输入中读入,并在结束输入后执行
C:\Joy\Ruby>ruby puts "Hello World!" ^D //Ctrl-D Hello World!
Ruby字符串
“”,’’括起来的是Ruby中的字符串
区别:
puts "a\nb\nc" #输出 #a #b #c puts 'a\nb\nc' #输出:a\nb\nc puts "abcd #{4*4} efg" #输出: abcd 16 efg puts '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]
#输出第一个字符--->1
ary[0,2]
#输出第一个字符开始的2个字符--->1, 2
ary[0..1]
#输出第一个字符和第二个字符--->1, 2
ary[-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]
2
h["2"]
"4"
结构控制
1) case
i=8 case i when 1, 2..5 puts "1..5" when 6..10 puts "6..10" end #输出6..10
2) while
i = 0 puts "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 collection
end
for num in (4..6) puts num end #输出 #4 #5 #6