- 编辑,已解决 -
最终创建了一个方法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
wheremethod1
返回的东西不是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_method
并my_method
做了反转(例如)和访问参考,或者像评论一样the Tin Man
有method1
更改obj
但返回原始obj
,但我想知道它是否可能完成上述。
提前致谢。