Ruby向对象发送消息对于一个接触Ruby语言不久的人来说还是不好掌握的。希望通过本文介绍的内容可以充分掌握这一方法的应用。

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

如何实现Ruby向对象发送消息(java调用ruby)  Ruby向对象发送消息 第1张

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

  1. classHelloWorld
  2. defsay(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. classPerson
  2. attr_reader:name,:age,:height
  3. definitialize(name,age,height)
  4. @name,@age,@height=name,age,height
  5. end
  6. definspect
  7. "#@name#@age#@height"
  8. end
  9. end

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

  1. classArray
  2. defsort_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. pp1#[Alice3363,Gretel32
    64,Hansel3569,Ted3668]
  10. pp2#[Gretel3264,Alice33
    63,Hansel3569,Ted3668]
  11. pp3#[Alice3363,Gretel32
    64,Ted3668,Hansel3569]

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

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

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

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

转载请说明出处
知优网 » 如何实现Ruby向对象发送消息(java调用ruby)

发表评论

您需要后才能发表评论