- 締切済み
ローカル変数の使いかた
非常に初歩的なのですがrubyにおいてインスタンス変数、ローカル変数とクラス変数の使い分けがわかりません。 あるクラス内においてクラスから作られたすべてのオブジェクトに適用したい値はクラス変数に、インスタンスごとに違うのならインスタンス変数にするのはわかるのですが、クラス内でローカル変数はなぜ使うのでしょうか?受け取った引数もオブジェクトならインスタンス変数に、クラスならクラス変数に原理的には属すと思うのです。 あるオブジェクトがあるメゾッドを実行した時にそのオブジェクト全体に適用したくない変数をローカル変数にすると考えました。 その場合、なぜ class A a= 1 end のようにメゾッドに属さないクラス内にあるローカル変数があるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
No1です。 クラスの中でメソッドの外でのローカル変数の例。 標準ライブラリのなかで調べると、少なくとも下記のものが使ってますね。詳しくは読んでません。 /usr/local/lib/ruby/2.1.0/logger.rb /usr/local/lib/ruby/2.1.0/delegate.rb /usr/local/lib/ruby/2.1.0/minitest/mock.rb /usr/local/lib/ruby/2.1.0/openssl/cipher.rb /usr/local/lib/ruby/2.1.0/openssl/digest.rb /usr/local/lib/ruby/2.1.0/rake/file_utils_ext.rb /usr/local/lib/ruby/2.1.0/rake/file_list.rb /usr/local/lib/ruby/2.1.0/rdoc/rd/inline_parser.rb
- notnot
- ベストアンサー率47% (4900/10358)
メソッド内のローカル変数は、メソッド実行が終わったら忘れて良いような、保存する必要の無い一時的な変数に使います。 クラスの中でメソッドの外にローカル変数を書く機会は多くないですが、Rubyの場合、クラス定義も実行文なので、いろいろできます。これもクラス定義が終わったら忘れて良い一時的な変数ですね。 ただあまり使う機会は無いと思います。ちょっと良い例が思いつかないですね。 それから、質問文の中で「適用」とお書きですが何を意図した言葉なのか不明です。 書き直すと、 >あるクラス内においてクラスから作られたすべてのオブジェクトで共有したい変数はクラス変数に、インスタンスごとに違うのならインスタンス変数にする >あるオブジェクトがあるメソッドを実行した時にそのオブジェクトに保存する必要の無い変数をローカル変数にする