2011-04-27 56 views
2

作爲一名Ruby程序員,您是否覺得任何時候使用哪種功能都有點冒險,可能是因爲它有奇怪的行爲?它可能有很好的文檔記錄,但很難在調試時發現,或難以記憶?使用風險很大的Ruby功能

我一般儘量遠離String#gsub!。該文檔說「執行替換字符串#gsub到位,返回str或如果沒有替換執行。」所以如果沒有東西可以替代,那麼它會返回零。實際上,我沒有看到任何有用的用例。

那麼,有了你的經驗,還有什麼你想補充的嗎?

+3

'gsub!'_如果不進行替換,將不會用'nil'覆蓋字符串值。它只會_return_'nil'。 – 2011-04-27 18:21:29

+2

'!?!'作爲'false'關鍵字的替代物) – 2011-04-27 18:25:50

+0

'%space \ as \ a \ quote \ character' – 2011-04-27 18:26:43

回答

2

lambda,Proc或塊中使用return。語義are well defined,但你會得到它的錯誤,你會得到一個LocalJumpError

+0

如何通過使用來自lambda的返回來獲得LocalJumpError? – juan2raid 2011-04-27 20:43:35

+0

應該是'proc',而不是'proc'。現在看? – Theo 2011-04-28 05:29:33

+0

我不知道。我明白在proc中使用return語句的危險。但是當你從lambda返回時,它只是從lambda創建的proc而不是調用方法返回。所以我不明白的是如何從lambda返回時得到一個LocalJumpError。 – juan2raid 2011-04-28 16:22:55

1

Ruby的元編程功能可以非常危險的方式使用。我看到了一些嘗試運行的代碼 - 重新定義了像String或者Array這樣的代碼類的常用方法,雖然我可以看到這可以被一個小的臨時腳本接受,但我認爲這不是一個好主意具有許多依賴關係的複雜應用程序或許多維護者。

1

那麼,Ruby最廣泛濫用的危險功能當然是eval ing字符串。在絕大多數情況下(如果不是全部),它可以使用其他方法,通常define_methodconst_getconst_set

+0

我讀過也有'eval'的具體形式。 – 2011-04-28 00:12:06

1

throw/catch(不一樣的begin/rescue!)基本上是GOTO,而且可避免被認爲是任何語言使用的危險功能。

+0

+0使用「考慮」沒有「有害」。 – 2011-04-28 00:12:41