結論
caller
だった。
使用例:
$ pry
[1] pry(main)> caller
=> ["/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:355:in `eval'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:355:in `evaluate_ruby'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:323:in `handle_line'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:243:in `block (2 levels) in eval'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:242:in `catch'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:242:in `block in eval'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:241:in `catch'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_instance.rb:241:in `eval'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:77:in `block in repl'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:67:in `loop'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:67:in `repl'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:38:in `block in start'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/input_lock.rb:61:in `call'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/input_lock.rb:61:in `__with_ownership'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/input_lock.rb:79:in `with_ownership'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:38:in `start'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/repl.rb:15:in `start'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/pry_class.rb:169:in `start'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/cli.rb:219:in `block in <top (required)>'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/cli.rb:83:in `call'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/cli.rb:83:in `block in parse_options'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/cli.rb:83:in `each'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/lib/pry/cli.rb:83:in `parse_options'",
"/Users/hoge/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/pry-0.10.3/bin/pry:16:in `<top (required)>'",
"/Users/hoge/.rbenv/versions/2.2.3/bin/pry:23:in `load'",
"/Users/hoge/.rbenv/versions/2.2.3/bin/pry:23:in `<main>'"]
よもやま
ところでcaller
って、メソッドだっけ? それとも特殊な変数か何か? というのが気になった。
このような疑問が湧いた時、defined?
を使うと、コンソール上でこれを確認できる。
[9] pry(main)> defined? caller
=> "method"
ところでところで、defined?
には調べたいもののシンボルや文字列では無く、調べたい物を直接渡す。
[11] pry(main)> defined? caller
=> "method"
おなじくメタ情報を取得する#method
の場合は、シンボルで引数として受け取ってる。
[13] pry(main)> method(:caller)
=>
defined?
はなんで構文上意味がある物を直接受け取る事ができるんだろう。
defined?
はメソッドなんだろうか?
defined? defined?
としてみたが syntax error
になってしまった。
すくなくともメソッドでは無い。
method(:defined?)
NameError: undefined method `defined?' for class `Object'
from (pry):17:in `method'