質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

500閲覧

RUby 変数の中身確認をメソッド化したい

d04062

総合スコア111

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/08/06 02:57

Rubyで変数nの中身を確認したいとき。

n = 0
p "n: " + n

と記述しているのですが、
例えば、下のようにメソッド化したりする書き方はありますでしょうか?

n = 0
pp(n)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

呼び出されたメソッドから、呼び出し元の環境のローカル変数はアクセスできないので、環境(binding)を渡してやる必要があります。

Ruby

1class Binding 2 def foo(var) 3 puts "#{var}=#{local_variable_get(var)}" 4 end 5end 6 7n=123 8 9binding.foo(:n)

Ruby

1def foo(var, bind) 2 puts "#{var}=#{bind.local_variable_get(var)}" 3end 4 5n=123 6 7foo(:n, binding)

これでうれしいかどうかですね。
あるいは、単純に、

Ruby

1def foo(var, value) 2 puts "#{var}=#{value}" 3end 4 5n=123 6 7foo(:n, n)

か。
こういうときは、マクロが欲しいところです。

投稿2020/08/06 03:31

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d04062

2020/08/07 00:57

ありがとうございます! 便利に使えました
guest

0

rb

1n = 0 2eval('local_variables').find { |x| eval(x.to_s) == n } 3p "#{variable_name}: #{n}" 4#=> "n: 0"

こんな感じのものをメソッド化すればいいので、できなくはないと思いますがスコープやら値の重複やら考慮することが多すぎるのであまり現実的ではないです。加えて必ず文字列として出力されるので、デバッグという観点でいうと、中身のオブジェクトが結局不明なままであるのでいまいちだと思います。

メソッド名とその値をセットで表示させたいだけならば

rb

1p n: n 2#=> { :n => 0 }

とするのが最も手っ取り早く、デバッグとしても適していると思います。

投稿2020/08/06 03:39

Mugheart

総合スコア2349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d04062

2020/08/07 00:56

ありがとうございます、なるほど、 確かに最もシンプルで汎用性がありますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問