Re: [Ruby] ruby 1.9 new features

看板Ruby作者 (godfat 真常)時間17年前 (2007/12/08 16:46), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《contagious (漂移胖)》之銘言: : ※ 引述《godfat (godfat 真常)》之銘言: : : 騙人,明明就可以,而且也沒有 __send, __send!, send! : : 所以現在是維持 1.8 不改? : 它寫的是 doesn't "always" : 在 1.8 裡的行為是..如果你用 bar.send(:foo) : 如果 bar 裡有 public 的 foo 也有 private 的 foo ,會用 private 的 foo 嗯...翻了一下討論串,看到有人指出為什麼 foo.bar 和 foo.send :bar 會是不同的情況...(連 matz 一開始都覺得可能是 bug...) http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/153723 也就是說,foo.bar 看不到 private method, 所以會 invoke method_missing; 然而,foo.send :bar 看得到, 所以如果有個 foo 有個 private method :bar, 則 foo.send :bar 會 invoke 該 method 而非 method_missing. 原發問者提出了個 workaround: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/153749 透過 eval 來達成看不到 private method 的 send... 嗯,這恐怕確實是個滿大的問題,但我測試現在手上的 ruby 1.9, 行為還是跟 ruby 1.8 一致,也沒有上述提到的幾個 send!, __send, __send! 其實 ruby 裡有不少一致性很低,例外很多的狀況,我覺得實在不是個好現象。 有點像是為了便利妥協,但是造成不少意外... 希望以後可以有更高的一致性,不要老是有奇怪的意外 edited: 更正,根據這篇: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/153828 fcall 可以呼叫 private method, 而 send 不可以。 但是現行的 ruby 1.9 似乎是相反, send 看得到 private method, 而 fcall 看不到 :D 以後要改用 fcall 了... 暴力 send 則用 __send__ 吧 edited2: 但 fcall 的行為和一般 method_missing 又不一樣 :( msg 會是 fcall, 而原本的 msg 則成為 args.first... def method_missing msg, *args puts msg, args.join end 這樣還是不行啊 -_-b edited3: 昏倒,有夠詭異,新 class 有 send!, __send, __send!, 而內建的 Fixnum, String, 都沒有... 可能 std lib 還沒更新? 而且說詞正好全部相反,反而是 send!, __send, __send!, fcall 看不到 private. 而且每個對 method_missing 都是有問題的... 看來 ruby 1.9 xmas 恐怕是來不及,頂多來個 beta 吧... --   『風車』が廻り続ける度に 『美しき』幻想が静かに紡がれ    『焔』の揺らめきの外に 『腕』を伸ばす愚かな者達 -《Roman》5th Story  『宝石』をより多く掴もうと 『朝と夜』の狭間を彷徨い続ける Track 10   『星屑』の砂の煌めきにも 『葡萄酒』の仄甘い陶酔を魅せ 黄昏の賢者 『賢者』が忌避する檻の中から 『伝言』の真意を彼等に問うだろう   『天使』が别れを告げし時 『地平線』は第五の物語を識る -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18 ※ 編輯: godfat 來自: 220.135.28.18 (12/08 16:58)

12/08 18:13, , 1F
這篇好像看出不少 Ruby 跟 Python 的想法差異 ... XD
12/08 18:13, 1F

12/08 19:11, , 2F
Python 我不太熟,可以講講嗎? :p
12/08 19:11, 2F
文章代碼(AID): #17MbdVZk (Ruby)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #17MbdVZk (Ruby)