一:ruby重要特点
Ruby是解释型语言。(提高了调试速度,执行效率低)
变量没有类型 (错误检查功能也变弱了)
所有变量均无需声明即可使用
语法比较简单,类似 Algol
具有自动垃圾回收机制(能自动回收不再使用的对象)
纯粹的面向对象语言,基本的类型都是对象
迭代器功能可以将循环抽象化,使得代码更加简介
强大的字符串操作功能,和正则表达式检索功能
可以计算非常大的整数
可以直接访问操作系统(使用ruby可以进行操作系统编程)
可以对某对象添加方法
用模块进行混合插入
闭包,可以把某过程片段对象化,对象化后的该过程片段称为闭包
具有错误处理功能
动态加载(如果操作系统允许,可以在运行的时候读入对象文件

二:输出的三种方式

puts "One"   
print "two"  
printf "three"
puts "fout"



输出结果:


One


twothreefout


可以得出结论:puts 换行,print不换行,printf不换行



三:单引号,双引号


一般情况下这两种引号通用,可以互相嵌套。


转义字符是:\


puts "hello world '"
puts 'hello world "'
puts 'supan said:"I \'love\' you"'



输出:


hello world '


hello world "


supan said:"I 'love' you"



四:连句


由上面的语句开一看到,每条语句都是占用一行,并且不用分号。


如果需要在一行上写多条语句,需要用分号隔开例如:


puts "chen"; puts "chao"; puts "yang"



输出:


chen


chao


yang



五:换行


puts 默认的会在打印的字符串后天添加一个换行符\n(如果要打印的字符后面已经有


换行符就不会添加,如果需要打印两个换行符需要添加两个\n\n)


print不会换行,printf也不会换行


puts "chenchaoyang"
puts "chenchaoyang\n"
puts "chenchaoyang\n\n"
puts "123456"



输出:


chenchaoyang


chenchaoyang


chenchaoyang



123456




六:连行符 \


当语句过长时会影响阅读,希望分成多行去写,但不希望语句逻辑


被中断,在这种情况下一种方式是用字符串连接符号连接语句,但是


字符串连接符属于运算符,因此字符串连接是消耗资源的,而连行符属于格式控制字符,


提倡使用


puts "chenchao
yang"
puts "chenchao\
yang"



输出:


chenchao


yang


chenchaoyang




七:注释符


两种:


单行:用#开头


多行:用=begin 开头 =end结束


puts "chenchaoyang a"
#puts "chenchaoyang a"
puts "chenchaoyang c"
=begin
puts "chenchaoyang"
puts "chenchaoyang"
puts "chenchaoyang"
puts "chenchaoyang"
puts "chenchaoyang"
=end
puts "chenchaoyang c"



输出:


chenchaoyang a


chenchaoyang c


chenchaoyang c



八:局部变量


ruby中的变量是不能脱离类而存在的,局部变量就是普通变量


以小写字母或下划线开头


局部变量在使用之前如果不被初始化将会出错


a = "chenchaoyang"
puts a
puts b
b = "chenchaoyang"
puts b



输出:


G:/Myeclipse20130521/helloruby/helloworld.rb:3:in `<main>': undefined local variable or method `b' for main:Object (NameError)


chenchaoyang



九:基本输入


ruby中使用gets方法来解决最基本的输入问题,例如


可以用a= gets来将用户输入的字符保存到局部变量a中


注意:ruby中使用=作为赋值符号


a = gets
puts a



输出:


在控制台输入“chenchaoyang"按下enter键


输出:chenchaoyang



十: 数字和字符串连接符


数字可以有前缀:


0表示8进制


0x表示16进制


0b表示2进制


puts 0
puts 1
puts 1.5
puts 0.62
puts 0123
puts 0X5BC
puts 0b0011



输出:


1


1.5


0.62


83


1468


3


ruby中字符串连接符用+


a = "chenchao"


b = "yang"


puts a + "&" + b


输出:chenchao&yang




十一:类


ruby是面向对象比java更纯粹,一切都是对象,所以ruby中


没有函数,只有方法。bugy中所有的变量,常量都不能脱离


类而存在,故而,在介绍了最基本的知识之后,紧要的就要


介绍类。


ruby中类名用大写字母开头,


实例属性以@开头,变量和方法名应该用小写字母或下划线开头


假设要定义的类名为"Man"包含 name 和age两个实例属性


sayname sayage方法,


定义类的方法使用def……end 语句块如果方法有返回值可以


return语句,类的初始化用innitialize方法,相当于java和c++


中的构造函数


在ruby中所有类的父类是Object



十二:类的基本使用


实例化类的时候用 类名.new()


属性可以不定义


例如:


#类的开头用class关键字
class Man
#def开头的表示的类的方法,这个innitialize方法是构造方法
def initialize(name,age)
   #name表示的是类的属性
   @name = name
   #age表示的是类的属性
   @age = age
end
#定义类的方法
def sayname
   puts @name
end
#定义类的方法
def sayage
   puts @age
end
#类的结束用end关键字
end

puts "11111111"
#实例化类的时候用new关键字
m = Man.new("chenchaoyang",27)
m.sayname
m.sayage
n = Man.new("chenziyang",35)
n.sayname
n.sayage
puts "222222"



输出:


11111111


chenchaoyang


27


chenziyang


35


222222



十三:类的继承


用关键符号: <


例如:我们要定义一个Chinese类继承上面的Man类


注意:ruby文件中包含中文需要在文件的第一行中


写上:# encoding: utf-8


增加一个love方法:


# encoding: utf-8
class Man
def initialize(name,age)
   @name = name
   @age = age
end
def sayname
   puts @name
end
def sayage
   puts @age
end
end

puts "11111111"
m = Man.new("chenchaoyang",27)
m.sayname
m.sayage
n = Man.new("chenziyang",35)
n.sayname
n.sayage
puts "222222"

class Chinese < Man
   def love
       puts "我非常爱我的妈妈"
   end
end
chenchaoyang = Chinese.new("chenchaoyang",27);
chenchaoyang.sayname
chenchaoyang.sayage
chenchaoyang.love




输出:


11111111


chenchaoyang


27


chenziyang


35


222222


chenchaoyang


27


我非常爱我的妈妈




十四:类的继承,在子类中调用父类的同名函数用super关键字


注意如果要调用父类中的方法含有参数用super(参数)的方式调用


例子:


# encoding: utf-8
class Man
def initialize(name,age)
   @name = name
   @age = age
end
def sayname
   puts @name
end
def sayage
   puts @age
end
end
puts "11111111"
m = Man.new("chenchaoyang",27)
m.sayname
m.sayage
n = Man.new("chenziyang",35)
n.sayname
n.sayage
puts "222222"

class Chinese < Man
    def sayname
       super
       puts "这是从子类的方法中打印出来的"
    end
end
chenchaoyang = Chinese.new("chenchaoyang",27);
chenchaoyang.sayname
chenchaoyang.sayage



输出:


11111111


chenchaoyang


27


chenziyang


35


222222


chenchaoyang


这是从子类的方法中打印出来的


27




待续。。。。。。。。。。。