Ruby语言做为一种解释型面完全面向对象的脚本语言,值得我们去深入研究。我们可以利用Ruby向对象发送消息。下面将为大家详细介绍相关方法。#t#
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的临高网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
我们可以直接实现Ruby向对象发送消息:
我们通常使用hw.say("world"),但send可以对private的方法起作用。 不光如此send可以使程序更加动态,下面我们看看一个例子:
我们定义了一个类Person,我们希望一个包含Person对象的数组能够按照Person的任意成员数据来排序实现Ruby向对象发送消息:
- class Person
- attr_reader :name,:age,:height
- def initialize(name,age,height)
- @name,@age,@height = name,age,height
- end
- def inspect
- "#@name #@age #@height"
- end
- end
在ruby中任何一个类都可以随时打开的,这样可以写出像2.days_ago这样优美的code,我们打开Array,并定义一个sort_by方法:
- class Array
- def sort_by(sysm)
- self.sort{|x,y| x.send(sym)
<=> y.send(sym)}- end
- end
我们看看运行结果:
- people = []
- people << Person.new("Hansel",35,69)
- people << Person.new("Gretel",32,64)
- people << Person.new("Ted",36,68)
- people << Person.new("Alice", 33, 63)
- p1 = people.sort_by(:name)
- p2 = people.sort_by(:age)
- p3 = people.sort_by(:height)
- p p1 # [Alice 33 63, Gretel 32
64, Hansel 35 69, Ted 36 68]- p p2 # [Gretel 32 64, Alice 33
63, Hansel 35 69, Ted 36 68]- 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.csdahua.cn/qtweb/news47/293297.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网