方法在源文件中的位置

时间:2011-10-24 01:25:09

标签: ruby ruby-1.9 ruby-1.8

当我尝试在源代码中提取方法的位置时,我可以这样做:

class Object  
    def source_position
        puts caller.first  
    end  
end  

这样当我在位于源代码第n行的链中使用它时,它会给我所需的结果:

test.rb

.
.
n:   'abcde'.source_position
.
.

# => test.rb:n:in `<main>`

但是当我在此命令之前进行换行时,它会返回链的开头位置而不是相关方法的位置:

.
.
n:    'abcde'.
n+1:  source_position
.
.

# => test.rb:n:in `<main>`

或(在红宝石1.9中),

.
.
n:    'abcde'
n+1:  .source_position
.
.

# => test.rb:n:in `<main>`

这是一个功能而不是错误吗?如果是这样,有没有办法获得方法的位置,那么在上面的最后两个例子中,n+1将作为行而不是n返回?

2 个答案:

答案 0 :(得分:1)

'source_position'是instance_methods,因此对被调用对象进行操作。当您的代码将调用者(对象)所在的行放入时,这不仅是一个功能,而且恰好是您编码的内容。

简而言之,'source_position`不会检索代码中方法的位置,而是检索它所调用的对象的位置。

答案 1 :(得分:0)

不是红宝石专家,但对红宝石来说听起来是合理的事情......

如果说过,puts __LINE__会为你工作吗?

我无法分辨,因为你真的没有说出你需要的原因或者你将如何使用它