Ruby 板


LINE

我回文好了... 三行實在講不了什麼 @@" ※ 引述《shelary (喵小咩)》之銘言: : 標題: [閒聊] 是否有 Ruby 語法的檢查器? : 時間: Sat Nov 22 13:41:08 2008 : 不知道有沒有什麼套件是可以檢查 Ruby 語法的?? : 例如變數名稱打錯字, 實際執行時會出現 找不到這個變數(=nil) : 但如果可以事先檢查, 就可以減少很多除錯時浪費的時間了. : -- :



※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 59.126.45.78 : 推 godfat:option -c 在 gcc 意思是 compile only, ruby 是 syntax 11/22 13 : → godfat:check. 不過如果是變數打錯字,這不屬於 syntax error, 11/22 13 : → godfat:恐怕還是必須等到執行時才會知道喔,這是沒辦法的 11/22 13 (不好意思 gcc option 說錯了,實際上是: -S Compile only; do not assemble or link -c Compile and assemble, but do not link ) 如推文所述,ruby -c file.rb 就是只進行 syntax check. 不過像是變數打錯,如把 params 打成 parama, 這不屬於 syntax error, 基本上,這是符合 syntax 的。systax 說的是 term 與 term 之間的關係, 例如: a = b a 是合法的 variable name, b 也是合法的 variable name, 所以這句話會翻譯成把 b 這個變數的值 assign 給 a, 整句話是合法的。 但是實際上執行時,會發生: NameError: undefined local variable or method `b' for main:Object 這個不屬於 syntax error, 如: SyntaxError.ancestors => [SyntaxError, ScriptError, Exception, Object, Kernel] NameError.ancestors => [NameError, StandardError, Exception, Object, Kernel] 前者是靜態的,是 compile time 決定的。你的程式 lexical 結構, 不會因為 runtime 而改變,所以是可以進行 syntax check. 但是後者 NameError 是 runtime 才能決定,如果你在 a = b 之前 就先寫了 b = 1; 則 a = b 並沒有錯。意思就是,compile time 無法 決定哪個 variable 是否存在,因為 ruby 的變數是不用宣告的。 反之在 static typing 的語言,如 C/C++/Java/C# 等等, 因為變數需要宣告,所以 compile 時就能決定。但其實這也不屬於 syntax error, 而是 semantics 上的錯誤,例如 type error: TypeError.ancestors => [TypeError, StandardError, Exception, Object, Kernel] 因為變數在 compile time 不存在,則無法進行 type check, 所以會在 compile time 就有錯誤。 如果你說,那為什麼不能在跑 a = b 時檢查 b 是否存在? 其實在 ruby 裡,那就完全等同於執行一次了。所以這種檢查 = 正式執行。 你需要把所有的 runtime dependency 都讀進記憶體, 這跟完全跑一次的意思其實是一樣的... 所以 ruby 才會有一說是,compile time, link time, runtime 是沒有區分的。 就像你跑 attr_reader, 這種 metaprogramming 的東西,又是在 runtime 進入 compile time, 會在這幾個階段裡面不斷轉換... 而如果是真正的 syntax error, 那光在 require 進來時,就會出錯了。 所以實際上跑 -c 的意義並沒有說很大... 要求 runtime 彈性, 等於犧牲 compile time 時所獲得的資訊。所以這種檢查是沒辦法做的。 事實上這也是在說明一件事,static typing 可以討論的事情是比 dynamic typing 要來得多很多 :s -- #!/usr/bin/env ruby [露比] /Programming (Kn|N)ight/ 看板《Ruby》 # if a dog nailed extra legs that http://webptt.com/m.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.28.18
1F:→ poga:所以我覺得良好的IDE輔助很重要阿... 11/22 14:14
2F:→ poga:NetBean裡頭同名變數會標色,看到打完名稱沒標色就知道有問題 11/22 14:15
3F:→ godfat:之前有用了一下 Aptana, 還是嫌慢... orz NetBean 快嗎? 11/22 14:27
4F:→ poga:6.5純Ruby版的速度我是能接受了,起碼比Eclipse快上好幾倍... 11/22 14:37
5F:推 shelary:另外就是如果中間少打了 END ..常常會找不到是那裡少打了 11/22 15:32
6F:→ shelary:執行時出錯的訊息只會說.rb的最後一行少了END @_@" 11/22 15:33
7F:→ shelary:但是完全沒辦法幫助我去找到到底是那裡少打了 END 11/22 15:34
8F:推 poga:請善用會自己補do-end的各種工具 囧 11/22 15:36
9F:→ poga:沒有工具也要習慣自己檢查括號之類的才對... 11/22 15:37







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP