def str(s)
"#{s}"
end
p str(ruby)
上記だとエラーがおきるので、
何かいい方法がないのか知りたいです。。。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
実用プログラムに決して投入すべきではありませんが、Rubyならこんな芸当も可能です。
ruby
1def method_missing(name, *args) 2 name.to_s 3end 4 5p ruby # => "ruby"
投稿2018/09/07 09:09
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/07 09:11
2018/09/07 09:14
2018/09/11 12:59
2018/09/11 13:37
0
... 上記だとエラー ...
未定の ruby を 引数としてつかおうとするので仕方ないです。
未定でない変数の場合で書いてみました。
x.rb
ruby
1def str(symbol) 2 symbol.to_s 3end 4 5 6def pv(&block) 7 symbol = block.call 8 bind = block.binding 9 "#{symbol} = #{bind.eval(symbol.to_s)}" 10end 11 12val = 1 13 14p str(:ruby) 15p str(:val) 16 17# p pv{:ruby} 18p pv{:val}
参考情報
参考情報
- 変数の名前と値を表示するメソッド
https://qiita.com/diaphragm/items/68ad34ec0a6fc2515a88
他にも coller とか binding とかを調べるよいです。実行時の情報をいろいろ取得できます。
呼び出し元もソールファイル、行を取得できるので、その部分のソースコードを取得することもできるはずです。
投稿2018/09/07 15:50
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
maisumakunさんの回答が面白かったので
実用?的に改造
rb
1class UnkIsStr 2 def method_missing(name, *arg) 3 name.to_s 4 end 5end 6module Kernel 7 def str(&blk) 8 UnkIsStr.new.instance_eval &blk 9 end 10end 11 12# 使い方 13 14p str{ruby} 15 16str do 17 p ruby 18end 19 20# 以下は失敗する 21p ruby
投稿2018/09/07 10:10
総合スコア15147
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
引数に渡せるのは何らかの値(オブジェクト)です。
未定義の名前があった場合に、その名前の文字列を返すようにするのは、出来なくはないが、質問のようなことをやりたいと思ったのがそもそも間違っているはず。
何故そんな事をしたいと思ったのでしょうか?
投稿2018/09/07 08:29
総合スコア84499
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/11 13:06
2018/09/11 13:22
2018/09/11 13:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。