[心得] 呼叫方法都是訊息傳遞(Message Passing)

看板Ruby作者 (Markmcm)時間14年前 (2011/03/29 11:16), 編輯推噓2(204)
留言6則, 4人參與, 最新討論串1/2 (看更多)
正在讀這個文章 http://rubylearning.com/blog/2010/11/03/ do-you-understand-rubys-objects-messages-and-blocks/ 感覺很新奇,原來 Ruby 裡面的方法呼叫都是訊息傳遞(Message) 比如說 "Hello".downcase 其實是 "Hello".send :downcase 而 1 + 2 其實是 1.+ 2 也是 1.send :+, 2 像是 Dir['*'] 其實是 Dir.send :[], '*' send 這個方法能夠把訊息傳給物件的樣子,然後就會呼叫相關的方法。 有人知道這個有什麼關鍵性的意義嗎?想說有這樣子的設計一定有其原因。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.29.185.99

03/29 11:33, , 1F
我記得訊息傳遞是從smalltalk傳下來的
03/29 11:33, 1F

03/29 11:43, , 2F
dock typing
03/29 11:43, 2F

03/29 11:43, , 3F
duck
03/29 11:43, 3F

03/29 13:00, , 4F
message跟duck typing並不一定相關吧?
03/29 13:00, 4F

03/29 16:42, , 5F
run time vs comepile time,比較彈性,but
03/29 16:42, 5F

03/29 16:44, , 6F
但是相對compile time能做的優化就比較少了
03/29 16:44, 6F
剛剛讀了維基百科的解釋,正如 Ruby 跟 C 的不同一樣 一個是 message passing 一個是 call mechanism ,這兩個是對比。 這兩種模式有三個不同: 1. Message passing 通常要把所有變數都複製一份傳到倍呼叫的地方。 Call 只需要把記憶體位置或者是 CPU regster 丟出去即可。 2. 非同步類的 Message passing 不一定要等對方回復後才能繼續 但是 call 是一定要等對方結束。 3. Message passing 能夠提供 1對多的服務, 這也代表物件本身可能隨時都會發生更動。 不過這些特性好像跟 Ruby 架構比較沒相關就是了。 至少我以為大部分的 Ruby 程式還是拿來當 call 寫所以也沒差? 主要還是因為都是 Message ,所以什麼都是用 reflection 來作 runtime中途也才能隨便插入新的功能,就是 ruby 的強處。 但是我還是想問有什麼時候會用到上面說的三點嗎? ※ 編輯: markmcm 來自: 111.70.180.216 (03/29 20:12)
文章代碼(AID): #1DaKyJdb (Ruby)
文章代碼(AID): #1DaKyJdb (Ruby)