有没有办法获得该方法的完全限定路径的字符串表示?
考虑关注IRB会话:
> foo = File.stat("/")
> magic(foo.ctime) or foo.ctime.magic
=> "File::Stat#ctime"
是否有任何内置功能可以完成"魔术"?如果没有,我可以通过反思来动态获取字符串吗?
注意:我知道这个question,但我无法使用这个撬。
答案 0 :(得分:3)
有人可能会调用Object#method
,返回Method
的实例:
foo.method(:ctime)
#⇒ File::Stat#ctime()
可以提取完全限定的方法名称,例如来自Method#to_s
:
foo.method(:ctime).to_s[/(?<=\A#<Method: ).*(?=>)\z/]
#⇒ "File::Stat#ctime"
我不知道有没有能力直接从Method
实例获取fq-name,没有这个正则表达式技巧。
正如АлексейКузнецов在评论中正确指出的那样,为了避免正则表达式,可以使用:
full_method_name = "#{method.owner.name}##{method.name}"
#⇒ "File::Stat#ctime"