Ruby简介语法与运行过程ppt课件_第1页
Ruby简介语法与运行过程ppt课件_第2页
Ruby简介语法与运行过程ppt课件_第3页
Ruby简介语法与运行过程ppt课件_第4页
Ruby简介语法与运行过程ppt课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ruby简介:语法与运行过程,1,Ruby语言语法,2,Ruby是一种纯粹的面向对象脚本语言。它由日本的松本行弘创建于1983年。他常说,他是“试着让Ruby更自然,而不是更简单”,让一切符合生活常规。,Ruby简介,3,3,Ruby中所有的方法调用都是给对象传递消息。Ruby用“.”号分隔对象和消息,位于”.”前面的被当作对象,也就是消息的接收者;“.“后面的就是传递给对象的消息。,在Ruby里,程序操作的一切都是对象,产生的结果也都是对象。我们可以在Ruby中编写以下表达式:“HelloWorld“.length-1979.abs表达式计算将得到如下结果:111979,真正的面向对象语言,4,4,Ruby类之间只允许单继承,未指明父类的都是Object类的子类。在第20行建立了一个People的对象smith,建立对象时只调用从类Objcet继承的默认方法new。new为对象分配空间,然后调用方法initialize,并将自己的参数传递给它。可以认为initialize等价于C+或者Java中的构造函数。introduee是为People类添加的一个方法,如果需要还可以添加其他方法。People的子类Adult继承了People的两个方法。其中完全重新定义了方法introduce。继承父类的方法时,可以选择是对其进行补充,还是完全覆盖。如这里继承方法initialize的时候没有重新写,而是通过方法super执行父类方法,然后做了些补充。,类,5,5,Ruby采用一套命名规则区分变量的性质。用首字母表示这个名字的作用。局部变量、方法参数及方法名都由小写字母或下划线开头;全局变量由美元符号”$开头;实例变量开始于“”;类变量由”“开始;类名、模块名以及常量都用大写字母开头,所有变量都是对象的引用,变量赋值不是对象复制,而是引用的传递Ruby的实例变量只能在类或子类内部使用,外部不能直操作它们。这相当于C+类中具有protected属性的成员。要想读写这些变量,就需要写出类的属性方法,类似于set和get函数。例如,我们可以如下定义name的属性函数,6,6,7,Ruby提供了一套技术,通过它们可以建立一套独立的控制结构或者一段独立代码,并将其打包,做成独立的可重复使用的对象。块总是从与其具有相同名称的函数调用。这意味着如果您的块名称为test,那么您要使用函数test来调用这个块。,块(Block),使用一个简单的yield语句来调用块:deftestyield5puts在test方法内“yield100endtest|i|puts你在块#i内运行结果:你在块5内在test方法内你在块100内,7,8,运行结果:BEGIN代码块MAIN代码块END代码块,BEGIN#BEGIN代码块putsBEGIN代码块END#END代码块putsEND代码块#MAIN代码块putsMAIN代码块,每个Ruby源文件可以声明当文件被加载时要运行的代码块(BEGIN块),以及程序完成执行后要运行的代码块(END块)。,BEGIN和END块,8,9,模块(Module)是一种把方法、类和常量组合在一起的方式。模块(Module)提供了两大好处。模块提供了一个命名空间和避免名字冲突。模块实现了mix-in装置。模块(Module)定义了一个命名空间,相当于一个沙盒,在里边您的方法和常量不会与其他地方的方法常量冲突。模块类似与类,但有以下不同:模块不能实例化模块没有子类模块只能被另一个模块定义,模块(Module),定义一个模块:moduleTrigPI=3.141592654defTrig.sin(x)#.EnddefTrig.cos(x)#.Endend,9,Ruby可以在类中嵌入模块。为了在类中嵌入模块,可以在类中使用include语句。在include一个模块时,该模块中的方法就会附加到这个类中,这就是mix一in。这几乎消除了多重继承的需要,Array也可以include其他模块来扩充自己,模块Enumerable也可以mix一in到其他类中。这就有效地解决了多重继承问题,使Ruby可以得到多重继承的效果,同时又避免了多重继承所造成的麻烦。,Rubyinclude语句,10,10,Ruby中类和模块是不封闭的。模块和类都是动态调用的。Ruby支持正则表达式。Ruby有强大的库。Ruby的大部分操作都在操作系统层之下,Ruby的另一个显著特点是允许对象的特殊化,Ruby内置了废料收集,使用mark一and一sweep算法。,Ruby的其他亮点,11,11,Ruby程序解释与运行,12,Ruby是一门解释性语言,Ruby程序执行流程:分词词法解析语法解析编译成字节码RubyVM执行,12,13,分词Tokenizing,将程序代码切分成块(chunks),被称之为词条(token)x100?foo:bar,13,14,词法解析Lexing,requireripperrequireppppRipper.lex(x100?foo:bar)#1,0,:on_ident,x,#1,1,:on_sp,#1,2,:on_op,#1,3,:on_sp,#1,4,:on_int,100,#1,5,:on_sp,#1,6,:on_op,?,#,14,15,语法解析Parsing,语法解析阶段,Ruby会将词条文本转换成“抽象语法树”(abstractsyntaxtree),简称AST。“抽象语法树”是程序在内存中的表现形式。,requireripperrequireppppRipper.sexp(x100?foo:bar)#:program,#:ifop,#:binary,:vcall,:ident,x,1,0,:,:int,100,1,4,#:string_literal,:string_content,:tstring_content,foo,1,11,#:string_literal,:string_content,:tstring_content,foobar,1,19,15,16,语法解析Parsing,#定义程序:program,#if比较:ifop,#条件检测(x100):binary,:vcall,:ident,x,1,0,:,:int,100,1,4,#若为true,则返回“foo”:string_literal,:string_content,:tstring_content,foo,1,11,#若为false,则返回“bar”:string_literal,:string_content,:tstring_content,bar,1,19,16,17,从MRI到YARV,Ruby1.9之前,Ruby的官方解释器是MatzsRubyInterpreter(MRI),以遍历整个AST(抽象语法树)的方式执行程序Ruby1.9之后,YARV(YetAnotherRubyVM)取代MRI,作为Ruby执行程序的解释器YARV将抽象语法树进一步编译成字节码来运行,同时针对一些特殊指令有大量的优化,17,18,18,19,字节码编译Compilingtobytecode,putsRubyVM:InstructionSpile(x100?foo:bar).disassemble#=disasm:=#0000trace1(1)#0002putself#0003opt_send_without_block#0005putobject100#0007opt_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论