2013-04-25 32 views
-3

下面的代碼來自評論控制器。第3行中的「哦」是什麼?什麼是軌道2.3中的「哦」方法?

@offer = Offer.find(params[:offer_id]) 
@offer_comment = @offer.offer_comments.build(params[:offer_comment]) 
@offer_comment.commenter oh = current_user 
@offer_comment.save! 
Notify::offer_comment_create(@offer_comment) 
@offer.update_attribute(:read, false) if @offer.read? and current_user == @offer.offerer 
+0

爲什麼它被拒絕?誰是仇敵:(。 – geekdeepak 2013-04-25 19:22:38

+1

我的猜測是他們認爲你可能已經想出了這個問題。對於近距離投票也許也是如此。我不同意,因爲如果你不是一個有經驗的Ruby開發者,你可能不會理解'oh = current_user'。我認爲代碼編寫非常糟糕,你對此的反應只能證明他們通過不使用括號而產生了維護問題,特別是因爲他們沒有一致地使用它們,這些傻瓜所以不要感覺不好,這是一個糟糕的例子,如何編寫Ruby代碼 – 2013-04-26 00:43:25

回答

8

紅寶石會看到,路線爲:

@offer_comment.commenter(oh = current_user) 

所以它會分配給current_userohcommenter接受current_user,因爲它的說法。

2

它創建一個名爲oh一個新的局部變量和分配的current_user它的結果。但是,這個變量從來不會在其他地方使用,所以它基本上是沒有任何操作的。

1

Ruby允許沒有括號的方法,但我個人使用它們是因爲這種類型的情況。儘管Ruby通常可以根據其優先順序排序並理解,但它仍然可能是一個維護和支持問題。

我們人類閱讀起來比較困難,特別是如果我們一直跳入和跳出不同的語言,而且這些語言對方法參數使用不同的規則。對這個問題的不同答案證明了這一點,因爲聲明的含義很難辨別。 (其中一個答案已被刪除,但對於我們這些擁有足夠高排名的人仍然可見)。

我已經編程了很長時間,儘管Ruby風格指南有不同的說法,但我幾乎使用括號所有的時間,並堅持在我們的團隊在工作。在調試時,這些括號可能是快速發現錯誤或花費數小時才能找到它的區別。

+0

我不同的是,當它是DSL的東西我不會使用它們,雖然大多數DSL的東西都是專門爲了容忍這個。在這種情況下,我認爲不使用它們真的很糟糕,但如果它也是一個答案,答案會更好;) – 2013-04-25 14:48:10

+0

我同意DSL,它們往往更易讀。呃,我的回答更多的是一種咆哮,並沒有以「......結束我的草坪!」而結束。 :-)如果我在代碼中看到'@offer_comment.commenter oh = current_user',我的第一個想法就是「哦,他們忘記了回車,並沒有把它放在下一行」,導致了一個額外的錯誤。 – 2013-04-25 15:00:47

+0

是的,它將兩種氣味合併爲一個(沒有parens,嵌入的作業),使意圖難以確定。 – 2013-04-25 23:56:39

相關問題