获取方法的完全限定名称

时间:2016-05-27 10:32:21

标签: ruby

有没有办法获得该方法的完全限定路径的字符串表示?

考虑关注IRB会话:

> foo = File.stat("/")
> magic(foo.ctime) or foo.ctime.magic
=> "File::Stat#ctime"

是否有任何内置功能可以完成"魔术"?如果没有,我可以通过反思来动态获取字符串吗?

注意:我知道这个question,但我无法使用这个撬。

1 个答案:

答案 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"