Ruby ruby 所谓方法和消息怎么理解呢?

jiffies · 2012年04月08日 · 最后由 Jeweller_Tsai 回复于 2012年04月14日 · 3318 次阅读
class foo
  def bar
  end
end

foo.new.bar

类是方法和数据的集合,class 里定义的应该是一个 bar 方法。但是调用的时候为什么经常说是发送一个消息 bar 给 foo 的实例?

抽象概念而已,来源于 smalltalk,其实怎么说都可以。

ruby 有个方法 send,可以这样调用一个方法

foo.new.send :bar

如果理解为消息就觉得这个方法很贴切了。

a.b 就是给 receiver a 发送消息 b,至于消息怎么处理再涉及到 eigen class 的方法查找,找到方法后 receiver a 被绑定到 self 并调用方法。可以理解为方法是消息的 handler

#1 楼 @Rei 恩 还有个问题,ruby 类中的数据是不是都封装在内部,不能比如在

def bar
  @name="computer"
end

这里的 name 不能直接 foo.new.name 访问,必须得定义一个方法

#3 楼 @jiffies 是的。对象后面加点调用的都是方法。

#3 楼 @jiffies 1 我的理解是这样的,静态的叫方法,需要动态寻找的叫消息。 c/c++/java 的方法偏移地址在编译时可以确定,叫方法调用。 ruby/objc的方法偏移地址是需要运行时动态寻找的,理解为向对象发送消息更好。

2 类中是不包含你所说的数据的,只包含在类的实例中。

我认为这是一种更加面向对象的说法,发送消息方法调用看起来似乎没什么区别,但是以消息的角度来理解,可能更能写出符合语境的代码。例如

class Person
  def say(something)
     puts something
   end
end

tom = Person.new
tom.say 'Hello world!'

从上面例子,发say消息给tom,叫tom说出“helllo world!”。这样更觉起来更加的面向对象,这对改变我们的思维,写出漂亮的代码有帮助。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号