【问题标题】:Position of the method in source file方法在源文件中的位置
【发布时间】:2011-10-24 01:25:08
【问题描述】:

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

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>`

或(在 ruby​​ 1.9 中),

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

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

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

【问题讨论】:

    标签: ruby ruby-1.9 ruby-1.8


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      不是 ruby​​ 专家,但 ruby​​ 做这件事听起来很合理......

      话虽如此,puts __LINE__ 会为你工作吗?

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

      【讨论】:

      • 这行不通,因为它会返回一个常量。它将给出__LINE__ 调用的位置,而不是调用它的方法的位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      相关资源
      最近更新 更多