当我尝试在源代码中提取方法的位置时,我可以这样做:
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
返回?
答案 0 :(得分:1)
'source_position'是instance_methods,因此对被调用对象进行操作。当您的代码将调用者(对象)所在的行放入时,这不仅是一个功能,而且恰好是您编码的内容。
简而言之,'source_position`不会检索代码中方法的位置,而是检索它所调用的对象的位置。
答案 1 :(得分:0)
不是红宝石专家,但对红宝石来说听起来是合理的事情......
如果说过,puts __LINE__
会为你工作吗?
我无法分辨,因为你真的没有说出你需要的原因或者你将如何使用它