我有两个自制的单独的宝石,但是它们都有一个名为foo
的相同函数,而foo
是用C实现的,它位于相同的命名空间中,所以它是一种方法来确定我是否需要两个宝石,我使用哪个版本的foo
,或者它是一种确保我实际使用某个gem的foo
函数的方法,有人建议使用{ {1}}。
虽然我知道它们是多余的,但到目前为止我不想因为某些原因而删除它们。
答案 0 :(得分:1)
我搜索“ruby以编程方式查找函数定义”,并找到了这个答案:How can I get source code of a method dynamically and also which file is this method locate in。
这一点,加上一些简短的IRB实验,让我相信你想做的事情如下:
filename, lineno = method(:foo).source_location
if filename == "blah"
puts "looks like :foo is defined in 'blah'"
elsif filename == "blargh"
puts "looks like :foo is defined in 'blargh'"
end
以下是source_location
的更多文档:http://ruby-doc.org/core-1.9.3/Method.html#method-i-source_location