2011-10-24 11 views
0

は、私が行うことができます。ポジション

class Object 
    def source_position 
     puts caller.first 
    end 
end 

ているので、私は上に配置されているチェーンでそれを使用する場合

test.rb

. 
. 
n: 'abcde'.source_position 
. 
. 

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

が、私は、このコマンドの前に改行を作るとき、それは、pをバック与える:ソースコードのn番目の行は、それは私に望ましい結果を提供します代わりに、問題のメソッドの位置の連鎖の始まりのosition:(ルビー1.9で)

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

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

または、

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

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

が、これは機能の代わりに、バグですか?その場合は、メソッドの位置を取得する方法があるので、上記の最後の2つの例では、の代わりにn+1が行として返されますか?

答えて

0

ないルビーの専門家が、言われたことのルビーが行うための合理的なもの...

のように聞こえる、あなたのためのputs __LINE__仕事はだろうか?

あなたが本当に必要とする理由も言わなかったので、私が言うことができないか、あなたはそれが

+1

定数を返すので、これは機能しません。それは '__LINE__'呼び出しの位置を返します。呼び出したメソッドの位置ではありません。 – sawa

1

'source_position'を使用する方法はinstance_methodsであるためと呼ばれるオブジェクトで動作します。あなたのコードは、呼び出し元(オブジェクト)が配置されている行を配置するので、これは機能ではなく、コード化したものです。

つまり、 'source_position`はコード内のメソッドの位置ではなく、呼び出されたオブジェクトの位置を取得します。