Положение метода в исходном файле - PullRequest
0 голосов
/ 24 октября 2011

Когда я пытаюсь извлечь позицию метода в исходном коде, я могу сделать:

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 ]

1 голос
/ 24 октября 2011

’source_position´ является instance_methods и поэтому работает с вызываемым объектом. Поскольку ваш код помещает строку, в которой находится вызывающая сторона (объект), это не только функция, но именно то, что вы кодировали.

Короче говоря, «source_position» не извлекает позицию метода в вашем коде, но позицию объекта, к которому он вызывается.

0 голосов
/ 24 октября 2011

Не эксперт по рубину, но звучит как разумная вещь для рубина ...

Сказано, будет ли puts __LINE__ работать на вас?

Не могу сказатьпотому что вы действительно не сказали, зачем вам это нужно или как вы будете его использовать

...