0

だから私はメソッドを持っていたところにこのバグがありました:

def returnArr
  [2,3,4]
end

そして、私はこれをしました:

returnArr = returnArr.first

nilClass にはメソッド「first」がないことを示すエラーが返されました

さらに、そのコード行を実行した後、次のようにフォローアップします。

returnArr = returnArr().first

完全に正常に動作し、returnArr は returnArr() とは異なります。ここで何が起こっているのですか?

4

1 に答える 1

4

この線があるとき

 returnArr = returnArr.first

Ruby はこれを認識 (および実行) します。

 returnArr = nil
 returnArr = returnArr.first

変数に値を代入する前に、この変数は に初期化されnilます。したがって、この場合、ローカル変数はメソッドを隠します。あなたの側からのヒントがなければ、Ruby はあなたが実際にそのメソッドを呼び出したかったのかどうかを判断できません。括弧を付けると、ローカル変数が括弧を持てないことを ruby​​ が認識してメソッドを呼び出します。

二度とこれをしないでください。特に実際のアプリでは。

于 2012-12-17T00:41:55.160 に答える