花二十分钟教你Ruby快速入门(二)

文章作者 100test 发表时间 2007:03:14 17:34:42
来源 100Test.Com百考试题网


字符串中的奥秘

“#{name}”是什么意思?这是Ruby在某个字符串中插入其它字符的方式。在大括号之间放入的字符串(这里是指name)将被外部的字符串代替。你也可以使用字符串类内建的capitalize方法来确保某人名字的首字母大写:
image

上面的代码有两个地方需要说明:
第一,我们通过无括号的方式调用方法,因为括号是可选的;
第二,这里的默认参数值为“World”。也就是说在调用方法时如果没有提供name参数,则使用默认值“World”。

进化为Greeter!

我们是否需要一个真正的问候者(greeter),他能记住你的名字、问候你、总是尊重地向你示好?那么这就最好建立一个“Greeter”类:
image

在上面的类代码中定义了一个称为Greeter的类和一些类方法,其中出现了一些新的“关键词”:请注意“@name”,它是类的实例变量,并对类中的所有方法(say_hi和say_bye方法)都有效。

如何让Greeter类发挥作用?现在让我们来建立一个Greeter对象并使用它!image

Greeter类的实例对象g被建立后,它便接受了name参数(值为Pat)。那么我们能直接访问name吗?
image

看看上面的编译错误来看,这样直接访问name是行不通的。

窥视对象的内部

对象中的实例变量总是隐藏于其中,但也并非毫无踪迹可寻,通过审查(inspect)对象便会见到它们。当然还有其它的访问方法,但是Ruby采用了良好的面向对象的方式来保持数据的隐藏性。image

喔!这么多方法,可是我们只定义了两个方法呀?其它的方法又出自何处?不要担心,instance_methods方法列出了Greeter对象的所有方法,其中包括父类中定义的方法。如果我们只想对Greeter类的方法进行列表的话,那么把false作为参数调用instance_methods方法即可。false意味着我们不需要父类定义的方法。
image

哈哈,这才是我们想要的。下面让我们看看Greeter对象能回应哪些方法:image

它知道say_hi、to_s(此方法将对象转换为字符串,是任何对象都必备的默认方法,很想Java中的toString方法),但它不知道name。

相关文章


JAVA题库:传递引用的经典
敏捷开发技巧:以用户故事管理项目一
考SCJP的失败经历
台湾SUN的一位scea讲师介绍SCEA
花二十分钟教你Ruby快速入门(二)
JAVA题库:5道JAVA题
排序和金额转换·两道JAVA编程题及答案
技巧心得:SCJP学习指南
花二十分钟教你Ruby快速入门(一)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛