1

-編集、解決済み-

Object#rec必要なことを達成するためのメソッドを作成することになりました。これが結果です。

#$l stores the last object on which Object#rec was called
$l=nil;class Object;def rec;$l=self;end;end

class String
    attr_accessor :ref
    alias_method :old_reverse, :reverse
    def reverse
        self.rec.old_reverse
    end
    def my_method
        $l.ref + ' ' + self
    end
end

a = "Hello"
b = "dlroW" ; b.ref = a

p b.reverse.my_method #=> Hello World

誰かがより良い方法を持っているなら、質問はまだ開いています。

-編集、解決済み-


問題:

私はこれに似た状況にあります:

obj.method1.method2

ここで、method1以外のものが返され、obj必要な参照が保持されているため、再度method2アクセスする必要があります。obj


例えば:

class String
    attr_accessor :ref
    def my_method(b)
        b.ref + ' ' + self
    end
end

a = "Hello"
b = "dlroW" ; b.ref = a

#I want my_method to access 'b.ref' without having to pass 'b'
p b.reverse.my_method(b) #=> Hello World

別:

反転(例)と参照へのアクセスの両方を使用して実行した場合、または変更を加えて元の値を返すなどのコメントを付けbた場合は、再度合格する必要がないことはわかっていますが、それが可能かどうかを知りたいのですが、上記を実行します。 obj.my_methodmy_methodthe Tin Manmethod1objobj

前もって感謝します。

4

1 に答える 1

1

あなたが探しているように聞こえますObject.tap

x をブロックに譲り、x を返します。このメソッドの主な目的は、チェーン内の中間結果に対して操作を実行するために、メソッドチェーンを「利用」することです。

あなたの例では、オブジェクトを操作するために文字列のreverse!内部を使用できる場合があります。tapアプリケーションでは、 内tapで必要に応じてオブジェクトを操作すると、オブジェクトは次のメソッドに渡されます。

于 2011-09-22T18:36:01.267 に答える