rudy 方法 分析_ruby专题

 什么叫做一个方法呢?在OO编程里,我们不希望直接从外部操纵一个对象的数据;相反的,对象自己了解如何操纵自身(当被恰当地要求时).
你也许会说我们传递一条消息给一个对象,那些消息就会调用某类行为或者做有意义的回复.这些都会在我们无需了解或关心这个对象内部
工作机制的情况下发生.为我们所允许的可让其执行的作业(或等价的,它能听懂的消息)就是对象的方法. 

在ruby里,我们通过点(dot notation,正如C++或Java)来调用一个对象的方法.被调用的对象在点的左方给出.

ruby> "abcdef".length
   6  

表面上看,这一字符串被问及其长度.技术上看,我们正调用对象"abcdef"的length方法.

其它的对象也许拥有一个稍有不同的length接口,或者根本没有.消息的如何应答在程序运行期间做决定,行为也取决于其所指变量.

ruby> foo = "abc"
   "abc"
ruby> foo.length
   3
ruby> foo = ["abcde", "fghij"]
   ["abcde", "fghij"]
ruby> foo.length
   2  

length的意义也会随对象的变化而改变.在上例中,第一次我们叫foo返回其长度,它对应于一个简单字符串,这里也就只有一种合理的答案.第二次,foo代表一个数组,我们也许会考虑其长度为2,5或10;但一般情况下最合适的答案当然是2(其它类型长度也应被很容易的猜出).

ruby> foo[0].length
   5
ruby> foo[0].length + foo[1].length
   10  

这里需注意的是一个数组了解其自身作为一个数组的意义.Ruby中的一部分代码赋予了他们这一性质,因此对他们的需求可以自动的通过各种
适当的方法实现.由于相当少量的对应于我们在自然语言中所表达概念的方法名能被不同种类的数据如我们所愿地采用,这便将程序员从大量特殊函数名中解脱出来.OO编程语言的这一特点(在我看来,Java的这一点做的并不是很好)叫做多态(polymorphism). 

当一个对象碰到一个不能理解的信息,一个错误便会"发生":

ruby> foo = 5
   5
ruby> foo.length
ERR: (eval):1: undefined method `length' for 5(Fixnum)  

所以我们就需要了解什么方法是被这一对象所接受的,虽然我们并不需要了解这个方法是如何工作的.

如果要给方法赋参数,参数应在一对括号内,

object.method(arg1, arg2) 

如果不会引起歧义,括号可以去掉.

object.method arg1, arg2 

Ruby里有个特殊变量self;它指向任意调用方法的对象.由于"self"经常用到,为了方便它可被省掉:

self.method_name(args...) 

和这一样

method_name(args...) 

我们传统意义上的函数调用只不过是self方式调用的一种简写罢了.这也使Ruby可以叫作一种纯正的面向对象语言.当然,为了那些搞不清在Ruby里函数调用其实就是对象方法的人,函数化的方法看起来很像在别的语言中的函数.如果我们喜欢,我们也可以叫它们函数,就仿佛他们不是真的对象方法一样.  
 

时间: 2024-08-30 15:11:03

rudy 方法 分析_ruby专题的相关文章

ruby 单态方法 分析_ruby专题

 实体的行为取决于其类,但很多时候我们知道一个特定的实体需要特定的行为.在很多语言里,我们必须陷入另外再定义一个类的麻烦里,即使它只是用来接着实体化一次.在Ruby里,我们可以赋予任何对象属于其自身的方法. ruby> class SingletonTest     |   def size     |     print "25\n"     |   end     | end    nil ruby> test1 = SingletonTest.new    #<

Ruby中使用设计模式中的简单工厂模式和工厂方法模式_ruby专题

之前有看过<ruby设计模式>,不过渐渐的都忘记了.现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下. 简单工厂模式: # -*- encoding: utf-8 -*- #运算类 class Operation attr_accessor :number_a,:number_b def initialize(number_a = nil, number_b = nil) @number_a = number_a @number_b = number_b end d

详解Ruby中的方法概念_ruby专题

 Ruby方法跟其他编程语言中的函数非常相似, Ruby方法用于捆绑到一个单元中的一个或多个重复的语句. 方法名称应以小写字母开始.如果一个方法的名称以大写字母开始,Ruby可能会认为这是一个常数,因此可以正确解析调用. 方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用. 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def met

ruby迭代map的简洁写法实现原理分析_ruby专题

简便方法的用法 现有一个字符串列表,需要对其中的每个字符串执行转换大写操作,我们可以用一个简便写法来完成. 复制代码 代码如下: name_list = ["chareice", "angel"] name_list.map(&:upcase) # => ["CHAREICE", "ANGEL"] 这个写法等同于 复制代码 代码如下: name_list.map do {|name| name.upcase} 简

rudy 继承 概念_ruby专题

在日常生活中,我们对一切对象的分类都是有一定层次的.我们知道所有的猫都是哺乳动物,而所有的哺乳动物又都是动物.小型的类从更大的 类中继承它们的属性.如果一切的哺乳动物要呼吸,那么猫也要呼吸. 在Ruby里,我们可以这样表述这一概念: ruby> class Mammal     |   def breathe     |     print "inhale and exhale\n"     |   end     | end    nil ruby> class Cat&

Ruby中XML格式数据处理库REXML的使用方法指南_ruby专题

以树方式使用 REXMLREXML 的目的是 正好够用.在最大程度上,它能很好地完成任务. 实际上, REXML 支持两种不同样式的 XML 处理 ― "树"和"流". 第一种样式是 DOM 所尝试要做的更简单的版本:第二种样式是 SAX 所尝试要做的更简单的版本. 让我们先研究树样式.假设我们要提取上一个示例中的同一个地址簿文档. 下面的示例来自我所创建的经修改的 eval.rb : 标准 eval.rb (链接到 Ruby 教程)可以根据对复杂对象的表达式求值显

Ruby中操作文件的方法介绍_ruby专题

 Ruby提供了一套完整的I/O相关的内核模块中实现方法.所有I/O方法来自IO类. 类IO提供了所有的基本方法,如 read, write, gets, puts, readline, getc 和 printf. 本章将涵盖所有可供在Ruby中使用的基本I/O功能.如需使用更多的功能,请参考Ruby的IO类.puts 语句: 在前面的章节中,你指定值的变量和然后使用声明 puts 输出. puts 把语句指示程序显示存储在变量值.这将添加一个新行,每行末尾写出(输出). 例子: #!/usr

rails常用数据库查询操作、方法浅析_ruby专题

1.获取数据 获取第一条.最后一条记录 复制代码 代码如下: Model.first Model.first(options) Model.find(:first, options) Model.last Model.last(options) Model.find(:last, options) 通过id获取记录 复制代码 代码如下: Model.find(1, 10, options) Model.find([1, 10], options) .find all 复制代码 代码如下: Mod

Ruby中字符串左侧补零方法实例_ruby专题

最近有个需求,把数字显示成固定的位数,位数不足的在前面以零补充 比如 5 位: 复制代码 代码如下: 3 -> 00003 292 -> 00292 12422 -> 12422 发现 Ruby 很容易就可以实现了 复制代码 代码如下: irb> "%05d" % 12422 "12422" irb> "%05d" % 22 "00022" 上面的方法基本上是标准作法.如果是直接处理字符串,也可以