Ruby で関数を定義する前に関数を呼び出すにはどうすればよいですか?
概要
私は、seeds.rb ファイルに次の構造を持たせたいと考えています。
# Start of variables initialization
groups = ...
# End of variables initialization
check_data
save_data_in_database
# Functions go here
def check_data
...
end
def save_data_in_database
...
end
ただし、check_data を定義する前に呼び出したため、エラーが発生しました。ファイルの先頭に定義を置くこともできますが、そうするとファイルが読みにくくなると思います。別の回避策はありますか?
解決策
Ruby では、関数定義は、代入などの他のステートメントとまったく同じように実行されるステートメントです。つまり、インタプリタが「def check_data」ステートメントに到達するまで、check_data は存在しません。したがって、関数は使用する前に定義する必要があります。
1 つの方法は、関数を別のファイル「data_functions.rb」に配置し、それを先頭に要求することです。
require 'data_functions'
どうしても同じファイルに入れたい場合は、すべてのメイン ロジックを独自の関数でラップし、最後にそれを呼び出すことができます。
def main
groups = ...
check_data
save_data_in_database
end
def check_data
...
end
def save_data_in_database
...
end
main # run main code
ただし、Ruby はオブジェクト指向であるため、おそらくある時点で、単に単独の関数を記述するのではなく、ロジックをオブジェクトにラップすることになることに注意してください。