如何实现Ruby向对象发送消息

Ruby语言做为一种解释型面完全面向对象的脚本语言,值得我们去深入研究。我们可以利用Ruby向对象发送消息。下面将为大家详细介绍相关方法。#t#

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的临高网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

我们可以直接实现Ruby向对象发送消息:

  1. class HelloWorld 
  2. def say(name) 
  3. print "Hello, ", name 
  4. end 
  5. end 
  6. hw = HelloWorld.new 
  7. hw.send(:say,"world") 

我们通常使用hw.say("world"),但send可以对private的方法起作用。 不光如此send可以使程序更加动态,下面我们看看一个例子:

我们定义了一个类Person,我们希望一个包含Person对象的数组能够按照Person的任意成员数据来排序实现Ruby向对象发送消息:

 
 
 
  1. class Person 
  2. attr_reader :name,:age,:height 
  3. def initialize(name,age,height) 
  4. @name,@age,@height = name,age,height 
  5. end 
  6. def inspect 
  7. "#@name #@age #@height" 
  8. end 
  9. end 

在ruby中任何一个类都可以随时打开的,这样可以写出像2.days_ago这样优美的code,我们打开Array,并定义一个sort_by方法:

 
 
 
  1. class Array 
  2. def sort_by(sysm) 
  3. self.sort{|x,y| x.send(sym) 
    <=> y.send(sym)} 
  4. end 
  5. end 

我们看看运行结果:

 
 
 
  1. people = [] 
  2. people << Person.new("Hansel",35,69) 
  3. people << Person.new("Gretel",32,64) 
  4. people << Person.new("Ted",36,68) 
  5. people << Person.new("Alice", 33, 63) 
  6. p1 = people.sort_by(:name) 
  7. p2 = people.sort_by(:age) 
  8. p3 = people.sort_by(:height) 
  9. p p1 # [Alice 33 63, Gretel 32 
    64, Hansel 35 69, Ted 36 68] 
  10. p p2 # [Gretel 32 64, Alice 33 
    63, Hansel 35 69, Ted 36 68] 
  11. p p3 # [Alice 33 63, Gretel 32 
    64, Ted 36 68, Hansel 35 69] 

这个结果是如何得到的呢?

其实除了send外还有一个地方应该注意attr_reader,attr_reader相当于定义了name, age,heigh三个方法,而Array里的sort方法只需要提供一个比较方法:

x.send(sym) <=> y.send(sym) 通过send得到person的属性值,然后在使用<=>比较。

以上就是Ruby向对象发送消息的一些方法技巧讲解。

新闻标题:如何实现Ruby向对象发送消息
网站路径:http://www.hantingmc.com/qtweb/news47/293297.html

成都网站建设公司_创新互联,为您提供软件开发关键词优化虚拟主机移动网站建设小程序开发建站公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联