Re: [閒聊] 是否有 Ruby 語法的檢查器?

看板Ruby作者 (godfat 真常)時間16年前 (2008/11/22 15:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
: ◆ From: 220.135.28.18 : → poga:所以我覺得良好的IDE輔助很重要阿... 11/22 14 : → poga:NetBean裡頭同名變數會標色,看到打完名稱沒標色就知道有問題 11/22 14 : → godfat:之前有用了一下 Aptana, 還是嫌慢... orz NetBean 快嗎? 11/22 14 : → poga:6.5純Ruby版的速度我是能接受了,起碼比Eclipse快上好幾倍... 11/22 14 改天試試,總覺得仰賴 TextMate 不是好事... 不過也真的找不太到比較合我意的 editor @@ : 推 shelary:另外就是如果中間少打了 END ..常常會找不到是那裡少打了 11/22 15 : → shelary:執行時出錯的訊息只會說.rb的最後一行少了END @_@" 11/22 15 : → shelary:但是完全沒辦法幫助我去找到到底是那裡少打了 END 11/22 15 : 推 poga:請善用會自己補do-end的各種工具 囧 11/22 15 : → poga:沒有工具也要習慣自己檢查括號之類的才對... 11/22 15 其實這個問題跟壞掉的 html 在各種 browser 下顯示的結果都不太一樣有關。 簡單地說就是,你的程式碼在不平衡的狀況下,parse tree 會有超過一種以上的 可能。講白話點,就是 ambiguous, 沒有人有辦法知道你真正的意圖, 只能用「猜測」的,而事實上猜測當然不能保證一定正確,只能逼近正確。 舉個簡單的例子: def f puts 'f' end def g puts 'g' end f g 寫錯,寫成: def f puts 'f' def g puts 'g' end f g ok, 這樣你覺得應該是哪裡缺少 end? 很明顯因為排版的關係,是 f 少了。 但實際上 ruby 不看排版,所以也可能是: def f puts 'f' def g puts 'g' end f g 「至少」有這兩種可能,parser 在沒有其他資訊(如排版資訊)的情況下, 是沒辦法告訴你是在哪裡缺少 end. 事實上,如果他會知道的話, 或許語言設計就應該讓他幫你補上。例如 ECMA script (javascript), 他行末的 ; 就是自動幫你補上的。語言 spec 有說,如果他可以推斷的話, 他會幫你補上去。當然不能推斷,也就是 ambiguous 時,還是會報錯誤。 其實 ruby 也是 ; 可加可不加,只是 ruby 沒有 spec 就是了。 可以參考這個討論: http://flolac.iis.sinica.edu.tw/lambdawan/node/111 裡面提到了 Java 裡的 . 的 ambiguous 問題。ruby 裡其實也有類似問題, 像是 :: 有時候可以當成 . 的意思。之前 ruby-core 上也有討論, 有人希望捨棄 :: 的用法,因為他造成奇怪的 ambiguous 問題, 希望 :: 只拿來當成 constant resolution, 而不考慮 method call. 不過也有人說,因為這個 :: 當成 method call, 可以做一些很神奇的事.... 像是 method name 其實也可以用大寫開頭,所以事實上,當你說: Object::Array 時,到底是說 Object 裡的 Array constant, 還是呼叫 Object 的 Array method? 有很多東西,乍看之下好像方便,其實日後會帶來更多的不便。基本上我是反對 把沒關係的東西作成同一個名字。像是 Java 的 . 呼叫 class method 就很討厭。 == 這裡有一個笑話。在 Microsoft Visual C++ 6.0 裡面,你少打一個 ; 他會告訴你有成千上萬個 error. 千萬不要相信他,看到恐怖的 errors, 第一個請懷疑少打 ; 或是 }. 好在後來的 VC++ 比較聰明了,就算他猜不到哪裡少加,也不會噴上千個 errors. gcc 也常常會有錯誤訊息是類似:did you forget ; ? 或是之類的。 這真的只能說盡量逼近,但沒辦法做到準確。 -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18 ※ 編輯: godfat 來自: 220.135.28.18 (11/22 15:57)
文章代碼(AID): #199xiJbJ (Ruby)
文章代碼(AID): #199xiJbJ (Ruby)