1、Ruby语法基础Ruby is an Object Oriented LanguagelRuby是一门完全面向对象的语言,你所操作的每件东西都是对象.lRuby中的每件东西都具有它的类型(class),这些东西是这个类型(class)的实例(instance),所以可以这样理解:对象(object)就是类的实例(class instance).l进阶:Ruby中每件东西都是对象,所以ruby中的类型也是对象.l可以为类定义实例变量(instance variables,对每个实例都是唯一的变量)和实例方法(instance methods,用于访问实例变量).l如图,“.”号之前的为调用方法的
2、实例,“.”号之后为调用的方法和参数.l进阶:与Java的区别在于:行为总是内建在对象内(number.abs Math.abs(number).Ruby is an Object Oriented LanguageSome Basic Rubyl简单的Ruby程序:def say_hello(name)result=“Hello,“+nameend#开始调用puts say_hello(“Jack”)puts say_hello(“Will”)l只要每个语句放在单独的行上,结尾处就不需要加分号.l注释以#开头,在行尾结束.l不强制规定缩进Some Basic Rubyl方法(method),
3、用关键字def来定义,后接方法名和参数(参数的括号是可选的,但是有ruby风格的约定),用end结束.l变量不必声明,当我们赋值给它时,它便存在了.lputs:输出其后的内容,并后缀回车换行.l字符串”或者:使用双引号将比使用单引号有更多的处理,比如转义字符.DataStructure:Arrays and HasheslRuby的数组(Array)和散列表(Hash)是被索引的集合(indexed collection),存储对象的集合,通过键(key)来访问.数组的键是数字,散列表支持任何类型的键.lRuby的数组和散列表可以保存不同类型的对象.a=1,cat,3.14a0#访问第一个元素
4、lnil:类似null,表示没有任何东西的对象.DataStructure:Arrays and HasheslRuby的散列表和数组类似,但使用,每个元素需提供一个key和一个value.l如果访问未定义的键值对,将返回nil.Control Structurelif和unless:if 条件满足则执行elsif 条件满足则执行elseendunless 条件不满足则执行elseendControl Structurelwhile和until:while 条件满足则循环enduntil 条件不满足则循环endControl Structurel进阶:for和casefor 循环变量 in 范
5、围endcase 条件表达式when 满足条件1 thenwhen 满足条件2 thenelseendBlocks and IteratorslRuby中可以使用代码块(block)实现回调,传递一组代码,以及实现迭代器(iterator)l代码块是或doend之间的一组代码,约定单行block使用,多行使用doend.lblock可以与方法调用相关联,把block放在(可以调用block的)方法调用之后,就可以实现关联,如果方法调用有参数,则放在参数之后.a.meth puts“hello,World”Blocks and IteratorslRuby中使用block实现迭代器:从某种集合中
6、(例如Array或Hash)连续返回元素的方法.a=1,“super”,3.14a.each|item|puts item l如上,可以提供参数给block,前提是方法可关联的block可接受参数.ClasseslInheritance继承:class 类名 父类名end例如定义测试用例类:class NpFbsTurnOnOffTest Test:Unit:TestCaseendClass Variables and Class Methodsl类变量(class variable)被类的所有实例共享,变量名由两个开头,比如count,类变量在使用之前必须被初始化(赋值),对类和其实例都是私
7、有的.l类方法(class method)不束缚于任何特定的实例,直接使用类名.方法名调用.Access Controll控制方法的访问权限:lPublic(公有):可以被任何实例调用,没有限制访问权限.(默认)lProtected(保护):只能被定义了该方法的类或其子类的对象调用.lPrivate(私有):只能在当前对象的上下文中调用,不能对其他对象调用私有方法.Methods Return Valuesl每个被调用的方法都会有一个返回值(你可以选择不使用),是方法执行中最后一个语句的结果,或者在方法中由return指定.Variablesl局部变量:以小写字母或下划线开头,作用域起始于声明
8、处,结束于该声明所在的block,method定义,class定义的结尾.l实例变量:以开头,属于特定的对象.l类变量:以头.类变量在类的定义中定义,可以在类方法,实例方法等处进行赋值和引用.类变量被类,类的子类和他们的实例对象共享.Variablesl全局变量:以$开始的变量是全局变量,全局变量可以在程序的任何地方加以引用.引用尚未初始化的全局变量时,其值为nil.l常量:以大写字母开始,常量的定义和初始化由赋值过程完成.若对已定义的常数进行赋值的话,会出现警告信息.Including Other Fileslload:加载指定的文件,可以多次加载.load“filename.rb”lreq
9、uire:加载指定的文件,只会加载一次.require“filename”l被加载的文件中的局部变量不会蔓延到加载它的范围中.Load PathlRuby程序运行时加载的文件,是从指定的加载路径中寻找的.可以使用如下方法添加加载路径:$:.unshift File.join(File.dirname(_FILE_),)#组合成从当前源文件路径开始的相对路径,指向的路径将被增加到Load Path中.YAMLlRuby标准的序列化和反序列化文件格式,为Ruby程序保存配置信息的一种方便的方式.lYAML做为一个可移植的对象序列化方案,可以在不同的Ruby进程中将对象以普通文本传递,此外也适合Ruby与那些支持YAML的语言之间交换数据用.YAMLl主要数据结构的表示:lArray:-1-Jack(“-”和之后的内容之间需要有一个空格)lHashkey1:value1key2:value2(key与”:”之间不需要空格,“:”与value之间需要有一个空格)完