質問: ### 前提・実現したいこと 変数を定数として定義したファイルをrubyスクリプトから呼び出しして変数を使用したい。 変数は、アンダースコア始まりとしたい。 例: val.conf _USER=“taro” _IP_ADDR=“10.220.150.10” スクリプトからの呼び出し load ‘./val.conf/ puts _USER ### 発生している問題・エラーメッセージ NameError: undefined local variable or method ‘_USER’ ### 補足情報(FW/ツールのバージョンなど) ruby -v ruby 2.2.2p95 (2015-04-13 version 50295) [x86_64-linux] _で始まらない定数であれば問題ない。
回答: アルファベットの大文字から始まる識別子が定数になります。なので、`_USER` とか `_IP_ADDR` は定数ではなく、ローカル変数になります。 また、 にあるように、`#load` で読み込まれたファイル内で使われたローカル変数 (`_USER` とか) は、読み出し側には伝搬しません。なので、`NameError` が起こります。 `_USER`/`_IP_ADDR` の事前定義 + `#eval` を使って、 ``` _USER = '' _IP_ADDR = '' eval(File.read('./val.conf')) puts _USER puts _IP_ADDR ``` のようにすれば、`_USER`/`_IP_ADDR` を `val.conf` に従って設定できます。