2012-03-12 19 views
4

我想寫一個小紅寶石腳本,將有兩種方法(TrySlotLookAtCut)。每種方法都需要能夠調用另一種方法。當ruby解析第一個方法時,它會失敗,因爲它不瞭解第二個方法的名稱,因爲我還沒有定義它。Ruby:爲以後的定義命名一個方法?

所以,我怎麼告訴紅寶石,有一個叫做TrySlot,我將定義以後,所以我可以在我的定義調用TrySlotLookAtCut方法?

+0

如果您顯示一些能夠重現您所看到問題的Ruby代碼,它總是非常有幫助。定義兩個引用另一個的方法不會產生錯誤。這隻會發生,如果你要在其引用的其他方法被定義之前調用其中一種方法。 – 2012-03-12 02:33:02

回答

6

您得到問題的原因是,通常紅寶石假設所有名稱以大寫字母開始是常量。但是,它也可以讓你定義名稱以大寫字母開頭的方法。正在發生的事情是這樣的:

  • 紅寶石看到def LookAtCut和正確定義了一個名爲LookAtCut
  • LookAtCut方法,紅寶石看到TrySlot,假定它是一個常數,試圖找到它,失敗與錯誤,因爲它尚未定義。

解決辦法是不使用開頭大寫字符的方法名稱。然後,您可以使用尚未在另一個內部定義的方法:

def a 
    b 
end 

def b 
    puts "Hello!" 
end 

a #=> "Hello!" 
+0

+1;我根本沒有注意到。 – 2012-03-12 02:32:05

+0

啊。是否有關於Ruby的大寫思想的概述,我可以閱讀?可能還有其他的陷阱像我這樣爲...(這確實解決了BTW - thx) – 2012-03-12 02:37:48

+3

這很簡單。所有大寫字母都是一個常數。作爲一種非正式的標準,類常量是駱駝式的 - 「MyClass」。非類常量是帶下劃線的大寫 - 「DATE_FORMATS」。方法和變量被小寫和強調'my_method','my_variable'。 – 2012-03-12 02:46:51

相關問題