Rubyの変数参照に関するいくつかの注意点
2022-02-04 12:14:33
Rubyが式の中でaのような名前を見たとき、aがローカル変数の参照なのか、引数のないメソッドaの呼び出しなのかを判断する必要があります。Ruby はソースコード・ファイルを解析するとき、値が割り当てられているすべてのシンボルを記録しています。これらのシンボルは変数とみなされます。その後、変数にもメソッドコールにもなりうるシンボルに出会ったとき、Rubyはそのシンボルに値が割り当てられているかどうかをチェックする。もしそうなら、そのシンボルは変数として扱われ、そうでなければメソッドコールとして扱われる。この状況を説明するために、人間が設計した例を示します。
def a
print "Funciton 'a' called\n"
99
end
for i in 1..2
if i == 2
print "a=",a,"\n"
else
a=1
print "a=",a,"\n"
end
end
出力結果です。
a=1
Function 'a' called
a=99
Rubyは解析の際、最初のprint文でaが使われていることを確認し、まだaへの代入に遭遇していないので、これをメソッド呼び出しとして扱います。しかし、2番目のprint文を解析するとき、Rubyはaへの代入に遭遇しているので、それを変数として扱います。
なお、代入文は Ruby が見る限り、実行される必要はない。次のプログラムではエラーは発生しません。
a=1 if false;a
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyの乱数生成方法のまとめ
-
Mac OS XにRuby実行環境をインストールするための詳細な手順
-
win10でvirtualbox+vagrantでrubyの開発マシン環境を構築する
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Rubyの並列処理とグローバルロック
-
Rubyのデザインパターン。プログラミングにおけるアピアランスパターンの応用
-
Rubyのデザインパターン。プログラミングにおけるストラテジーパターンの活用
-
Rubyの基本的な環境変数の設定と一般的なインタープリタコマンド
-
Rubyでコレクションを書くためのガイド
-
Rubyの基本構文