我想寫一個小紅寶石腳本,將有兩種方法(TrySlot
和LookAtCut
)。每種方法都需要能夠調用另一種方法。當ruby解析第一個方法時,它會失敗,因爲它不瞭解第二個方法的名稱,因爲我還沒有定義它。Ruby:爲以後的定義命名一個方法?
所以,我怎麼告訴紅寶石,有一個叫做TrySlot
,我將定義以後,所以我可以在我的定義調用TrySlot
爲LookAtCut
方法?
我想寫一個小紅寶石腳本,將有兩種方法(TrySlot
和LookAtCut
)。每種方法都需要能夠調用另一種方法。當ruby解析第一個方法時,它會失敗,因爲它不瞭解第二個方法的名稱,因爲我還沒有定義它。Ruby:爲以後的定義命名一個方法?
所以,我怎麼告訴紅寶石,有一個叫做TrySlot
,我將定義以後,所以我可以在我的定義調用TrySlot
爲LookAtCut
方法?
您得到問題的原因是,通常紅寶石假設所有名稱以大寫字母開始是常量。但是,它也可以讓你定義名稱以大寫字母開頭的方法。正在發生的事情是這樣的:
def LookAtCut
和正確定義了一個名爲LookAtCut
LookAtCut
方法,紅寶石看到TrySlot
,假定它是一個常數,試圖找到它,失敗與錯誤,因爲它尚未定義。解決辦法是不使用開頭大寫字符的方法名稱。然後,您可以使用尚未在另一個內部定義的方法:
def a
b
end
def b
puts "Hello!"
end
a #=> "Hello!"
+1;我根本沒有注意到。 – 2012-03-12 02:32:05
啊。是否有關於Ruby的大寫思想的概述,我可以閱讀?可能還有其他的陷阱像我這樣爲...(這確實解決了BTW - thx) – 2012-03-12 02:37:48
這很簡單。所有大寫字母都是一個常數。作爲一種非正式的標準,類常量是駱駝式的 - 「MyClass」。非類常量是帶下劃線的大寫 - 「DATE_FORMATS」。方法和變量被小寫和強調'my_method','my_variable'。 – 2012-03-12 02:46:51
如果您顯示一些能夠重現您所看到問題的Ruby代碼,它總是非常有幫助。定義兩個引用另一個的方法不會產生錯誤。這隻會發生,如果你要在其引用的其他方法被定義之前調用其中一種方法。 – 2012-03-12 02:33:02