Re: [閒聊] 是否有 Ruby 語法的檢查器?
: ◆ 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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 5 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章
6
17