2012-03-12 10 views
4

私は2つの方法(TrySlotLookAtCut)を持つ小さなルビースクリプトを書こうとしています。それぞれのメソッドは他のメソッドを呼び出すことができる必要があります。 Rubyが最初のメソッドを解析しているとき、まだ定義されていないので、2番目のメソッドの名前を理解できないので失敗します。Ruby:後で定義する方法に名前を付けますか?

どのように私はルビーを教えてくださいので、私は後で私はLookAtCutのための私の定義でTrySlotを呼び出すことができます定義されますTrySlotと呼ばれる方法がありますか?

+0

表示されている問題を再現するRubyコードを表示すると、常に非常に役立ちます。両方を参照して2つのメソッドを定義しても、生成およびエラーは発生しません。それは、それが参照する他のメソッドが定義される前にメソッドの1つを呼び出す場合にのみ発生します。 –

答えて

6

問題が発生している理由は、通常、Rubyは大文字で始まるすべての名前を定数とみなしているためです。ただし、大文字で始まる名前のメソッドを定義することもできます。何が起こっていることは以下の通りです:

  • RubyはRubyがあるため、TrySlotを見て、それが一定であると仮定し、それを見つけようとするとエラーで失敗し、def LookAtCutを見て、正しくLookAtCutインサイドLookAtCut
  • という名前のメソッドを定義します定義されていません。

解決策は、大文字で始まるメソッド名を使用しないことです。

def a 
    b 
end 

def b 
    puts "Hello!" 
end 

a #=> "Hello!" 
+0

+1;私はまったく注意を払っていませんでした。 –

+0

ああ。私が読める資本化に関するRubyの考えのどこかに概要はありますか?おそらく私のためにこのような他のものがあります...(これはそれを修正しました - thx) –

+3

それはかなり簡単です。大文字にされたものはすべて定数です。非公式の標準として、クラス定数はラクダのケース - 「MyClass」です。非クラス定数は 'DATE_FORMATS'というアンダースコア付きの大文字です。メソッドと変数は小文字で、 'my_method'、' my_variable'を強調しています。 –

関連する問題