yamlで記述した設定ファイルを読み込んで、
設定値があれば、変数にセットし、
なければdefault値を使うプログラムを書いています。
こんな感じです。
[設定ファイル(yaml)]
top_dir :
linux : /home/user
windows : C:/Documents
[ruby]
conf = YAML.load_file(filename)
p conf #=> {"top_dir"=>{"linux"=>"/home/user", "windows"=>"C:/Documents"}}
str = "/root"
str = conf['top_dir']['linux'] unless conf['top_dir'].nil? or conf['top_dir']['linux'].nil?
最後の2次元Hashのキーをチェックして、変数にセットしている
部分ですが、もっと短く書けないでしょうか?
特にconfが3回も出てくるところに無駄を感じています。
ちなみに、Hashのキー'top_dir'と'linux'は
yamlに記述があるかもしれないし、ないかもしれないという
前提でお願いします。
達人の方、ご教授お願いします。
No.1ベストアンサー
- 回答日時:
"top_dir" が無い場合、"linux" が無い場合をそれぞれ考慮するとなると、confと書くのは最低二回は要るでしょう。
nil? という判断条件をひっくり返すことで、conf["top_dir"]["linux"]を一回に出来ます。~.nil? が出てきたら見直した方が良いでしょうね。
str = conf["top_dir"] && conf["top_dir"]["linux"] || "/root"
conf一回で済ませるパズル的解法としては、nilの添え字参照がエラーにならないようにする。
def nil.[](x)
end
str = conf["top_dir"]["linux"] || "/root"
パズルの回答以外ではやめた方が良いでしょう。デバッグがしにくくなります。
begin
str = conf["top_dir"]["linux"] || "/root"
rescue
str = "/root"
end
も駄目でしょう。こんな目的で例外を使ってはいけない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ruby】flockで掛けたロックを...
-
ギャスケット作成。修正の解説...
-
fortranでNAのあるデータを読み...
-
Fortran:列数の分からないデー...
-
VBAでcsvファイルもシートもあ...
-
EXCEL→CSV保存時のダブルクォー...
-
バッチ処理 特定の文字以降を...
-
ダブルコーテーション付きでCSV...
-
C# ファイルを読み込みlistvie...
-
【ExcelVBA】300万件越えCSVか...
-
VBA テキストボックスを選択状...
-
Excelマクロ 空白セルを無視し...
-
バッチ for /f 空白、スペース...
-
verilog HDLについての質問です...
-
VBA csvファイルのデータを...
-
VB.netでShellExecuteがしたい
-
複数のファイルをまたぐエクセ...
-
SQLでテキストボックスの文字を...
-
[コンパイルエラー 修飾子が不...
-
rubyを用いたCSVファイルの分割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのエラーについて
-
pycharmへのpysamインストール...
-
fortranでNAのあるデータを読み...
-
Fortran:列数の分からないデー...
-
【fortran77】空行を含む数値デ...
-
区切り文字の調整方法について...
-
【ruby】flockで掛けたロックを...
-
rubyの見えない文字
-
2次元Hashのkeyチェック方法
-
Ruby 暗号化したファイルの復号...
-
ギャスケット作成。修正の解説...
-
Excelマクロ 空白セルを無視し...
-
バッチ処理 特定の文字以降を...
-
【ExcelVBA】300万件越えCSVか...
-
ダブルコーテーション付きでCSV...
-
VBAでcsvファイルもシートもあ...
-
パイソンでテキストファイルが...
-
VBA テキストボックスを選択状...
-
CSVで余計な空行が入る
-
EXCEL→CSV保存時のダブルクォー...
おすすめ情報