作者godfat (godfat 真常)
看板Ruby
标题Re: [心得] 呼叫方法都是讯息传递(Message Passing)
时间Wed Mar 30 05:59:20 2011
※ 引述《markmcm (Markmcm)》之铭言:
: 标题: [心得] 呼叫方法都是讯息传递(Message Passing)
: 时间: Tue Mar 29 11:16:33 2011
:
: 正在读这个文章
:
: http://rubylearning.com/blog/2010/11/03/
: do-you-understand-rubys-objects-messages-and-blocks/
请原谅我懒得阅读了,直接回你的文章..
: send 这个方法能够把讯息传给物件的样子,然後就会呼叫相关的方法。
: 有人知道这个有什麽关键性的意义吗?想说有这样子的设计一定有其原因。
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 163.29.185.99
: 推 chchwy:我记得讯息传递是从smalltalk传下来的 03/29 11:33
yes, 这是来自 smalltalk 的特性,而 smalltalk 比 ruby 还纯,
连 if then else 也是 method call. 写成 ruby 的话可能像这样:
condition.if(then_clause, else_clause)
class TrueClass
def if then_clause, else_clause
then_clause.call
end
end
class FalseClass
def if then_clause, else_clause
else_clause.call
end
end
: 推 ducksteven:dock typing 03/29 11:43
: → ducksteven:duck 03/29 11:43
: → poga:message跟duck typing并不一定相关吧? 03/29 13:00
: → JmeHsieh:run time vs comepile time,比较弹性,but 03/29 16:42
: → JmeHsieh:但是相对compile time能做的优化就比较少了 03/29 16:44
以上都不尽然...
: 刚刚读了维基百科的解释,正如 Ruby 跟 C 的不同一样
: 一个是 message passing 一个是 call mechanism ,这两个是对比。
: 这两种模式有三个不同:
:
: 1. Message passing 通常要把所有变数都复制一份传到倍呼叫的地方。
: Call 只需要把记忆体位置或者是 CPU regster 丢出去即可。
这个怪怪的,不明白是指什麽
: 2. 非同步类的 Message passing 不一定要等对方回复後才能继续
: 但是 call 是一定要等对方结束。
这个比较像在说 actor model, 跟 ruby 的 method dispatching 没什麽关系
: 3. Message passing 能够提供 1对多的服务,
: 这也代表物件本身可能随时都会发生更动。
这个也不知道在讲什麽...
: 不过这些特性好像跟 Ruby 架构比较没相关就是了。
: 至少我以为大部分的 Ruby 程式还是拿来当 call 写所以也没差?
: 主要还是因为都是 Message ,所以什麽都是用 reflection 来作
: runtime中途也才能随便插入新的功能,就是 ruby 的强处。
: 但是我还是想问有什麽时候会用到上面说的三点吗?
可以这麽说。但你上面列的三点则都怪怪的... 需要讲更多一点
--
#!/usr/bin/env ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》
# if a
dog nailed
extra legs that
http://webptt.com/cn.aspx?n=bbs/Ruby/index.html
#
walks like an octopus, and Welcome ~
Ruby@ptt~
#
talks like an octopus, then
◢█◣ http://www.ruby-lang.org/
# we are happy to treat it as
█ http://www.ruby-doc.org/
# if it were
an octopus.
◥ ◤ http://www.rubyforge.org/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.160.129