0

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

class Object  
    def source_position
        puts caller.first  
    end  
end  

因此,当我在位于源代码第 n 行的链中使用它时,它会给我想要的结果:

测试.rb

.
.
n:   'abcde'.source_position
.
.

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

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

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

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

或(在 ruby​​ 1.9 中),

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

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

这是功能而不是错误吗?如果是这样,有没有办法获取方法的位置,以便在上面的最后两个示例中,n+1将作为 line 而不是返回n

4

2 回答 2

1

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

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

于 2011-10-24T12:42:42.850 回答
0

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

话虽如此, puts __LINE__对你有用吗?

我不知道,因为你真的没有说你为什么需要或者你将如何使用它

于 2011-10-24T01:35:03.640 回答