一个常量由大写字母开头.它应最多被赋值一次.在Ruby的当前版本中,常量的再赋值只会产生警告而不是错误(non-ANSI版的eval.rb不会报告这一警告)ruby>fluid=30 30ruby>fluid=31 31ruby>Solid=32 32ruby>Solid=33 (eval):1: warning: already initialized constant S...
http://www.jb51.net//article/12882.htm
局部变量由小写字母或下划线(_)开头.局部变量不像全局和实变量一样在初始化前含nil值.ruby> $foo nilruby> @foo nilruby> fooERR: (eval):1: undefined local variable or method `foo' for main(Object) 对局部变量的第一次赋值做的很像一次声明.如果你指向一...
http://www.jb51.net//article/12881.htm
一个实变量由@开头,它的范围限制在 self 对象内.两个不同的对象,即使属于同一个类,也可以拥有不同值的实变量.从对象外部来看,实变量不能改变甚至观察(比如, Ruby的实变量从来不是公用的),除非方法由程序员明确声明.像全局变量一样,实变量在初始前的值是nil.Ruby的实变量用不着声明.这暗含着对象的弹性结构.实际上,每个实变量都是在第一次出现时动态加入对象的.ruby> class InstTest | def set_foo(n...
http://www.jb51.net//article/12880.htm
全局变量由$开头.它们可以在程序的任何位置访问到.在初始化前,全局变量有一个特殊的值 nil.ruby> $foo nilruby> $foo = 5 5ruby> $foo 5 应谨慎使用全局变量.由于在任何地方都可以被写因此他们相当危险.滥用全局变量会导致很难隔离臭虫;同时也视为程序的设计未经严格考虑.当你发现必须要使用全局变量时,记得给它一个不会在其它地方一不小心就用到的描述性...
http://www.jb51.net//article/12879.htm
Ruby有三类变量,一种常量和两种严格意义上的伪变量(pseudo-variables).变量和常量都没有类型.虽然无类型变量存在一定的缺点,但却有更多的优点并很好的符合Ruby快速简便(quick and easy)的哲学精神.在大多数语言里,变量都必须指定其类型,可更改性(是不是个常数)和范围;由于类型的不存在,剩下的东西也可由变量名字很快确定(你马上会看见),在Ruby里我们不需要变量声明.由首字母标识符将其分类:$ 全局变量 &...
http://www.jb51.net//article/12878.htm
我们总是希望对未知事件分类.当它发生时,向其它方法传递一块作为参数的代码是最容易地解决方法,也就是说我们希望像处理数据一样处理代码.一个新的过程对象可以通过proc创建:ruby> quux = proc { | print "QUUXQUUXQUUX!!!\n" | } #<Proc:0x4017357c> 现在quux指向一个对象,像...
http://www.jb51.net//article/12877.htm
Ruby的模块非常类似类,除了:模块不可以有实体 模块不可以有子类 模块由module...end定义.实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看下去吧.模块有两种用法.其一是将相近的方法和实体放在一个相对集中的域里.Ruby标准包里的Math模块就扮演着这一角色:ruby> Math.sqrt(2) 1.41421ruby> Math::PI 3.14159 ::操作符告诉 Ruby&nbs...
http://www.jb51.net//article/12876.htm
实体的行为取决于其类,但很多时候我们知道一个特定的实体需要特定的行为.在很多语言里,我们必须陷入另外再定义一个类的麻烦里,即使它只是用来接着实体化一次.在Ruby里,我们可以赋予任何对象属于其自身的方法.ruby> class SingletonTest | def size | print "25\n" |&...
http://www.jb51.net//article/12875.htm
面向对象是一个挺让人迷惑的措辞.叫一切东西都是面向对象会让别人觉得你很时髦. Ruby 声称自己是面向对象的脚本语言;但究竟什么才是"面向对象"? 我们已经有了各种各样的答案,但所有这些恐怕都归结于同一件事.与其快速地概括它,不如让我们先花点儿时间考虑一下传统的编程模式.传统意义上,一个编程问题从出现的各种数据,以及处理数据的过程(procedures)着手.在这一模式下,数据是呆板,被动和无用的;它完全的求助于那个体积庞大的,主动的,逻辑性的,全能的过程体.这一做法的问题在于程序是由程序员写的,而他们仅仅能在工作中记下为数不多的细节.而随着工程的加大,它的核心也...
http://www.jb51.net//article/12869.htm
迭代器并不是Ruby发明的.它广泛地运用于各种面向对象语言.在Lisp中也有,只是不这么叫罢了.尽管如此,迭代器的概念并不为许多人熟悉,因此我们将在此做较为详细的介绍.你知道,动词 iterate 的意思是做同一件事许多遍,因此,iterator就是用来将同一件事做许多次的东西.当我们写代码时,我们需要各种环境下的循环.在C里,我们用for或者while.比如,char *str;for (str = "abcdefg"; *str != '\0'; str++) { &nb...
http://www.jb51.net//article/12868.htm
这章我们将讨论更多的Ruby流程控制.case我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大.ruby> i=8ruby> case i | when 1, 2..5 | print "1..5\n" | when 6..10  ...
http://www.jb51.net//article/12867.htm
