2014-01-09 73 views
1

在進一步研究Ruby時,我注意到有些方法確實給語言賦予了力量,而另一些方法只是語法上的糖。ruby​​中的方法類

糖的例子:.split,.strip,也就是任何方法,只是簡單地用數據結構來做一些簡單的任務。電力方法

例子:打電話,發,responds_to?method_missing的等

看來,如果你瞭解這些「電力法」你真的知道的語言等。

想了解三件事:

  1. 有沒有人每作出這樣的區分,無論是在一本書/博客文章等?
  2. 你個人做出這樣的區分嗎?
  3. 如果你覺得我說的是正確的,我應該知道什麼「電源方法」並使用更好?

謝謝(希望這個問題沒有得到休息!)

+0

這個問題最好的地方是 - https://www.ruby-forum.com/forum/ruby ..在這裏,你可能有風險保持它打開.. :) –

+0

不知道你的意思是功率方法。如果您的意思是元方法,那麼您可以參考一些關於ruby中的元編程的書籍 – texasbruce

回答

2

這些是不是真正的「電力法」,但在作爲Ruby庫工具箱只是一個工具。

callsend這樣的方法用於低級操作,繞過了通常的Ruby語義層。在編寫使用duck typing的通用代碼時經常使用responds_to?,而method_missing是一種編寫以動態方式響應各種方法的代碼的方法。這就是Rails ActiveRecord如何自動處理像find_by_name_or_phone這樣的方法調用。

split,stripchomp這樣的方法只是數據轉換方法。他們的主要功能是將一件東西轉換爲另一件東西,可選擇就地。

我不認爲這些方法之間有區別,它們都非常有用,但它們確實有其特定的用途。然而,就Ruby而言,所有方法都是平等的,對他們來說沒有等級或固有的重要性。

你會很少使用一些方法,所以除非你做了很多Ruby,否則你不太可能需要它們。

+0

而'method_missing'是一種糟糕的風格。 – CodeGroover

+0

@CodeGroover我不同意。我認爲這取決於你使用的是什麼。我同意,使用它作爲'find_by_name_or_phone'可能是不好的風格。 – Ajedi32

+0

感謝您的回答!不過,我應該澄清,我知道在語言本身中,所有這些都是平等的方法。我更多的意思是「使用權力方法表明你更好地理解語言」。有沒有人做過這樣的區分,如果有的話,他們列出了這些方法? –