< :the previous in number
^ :the list in numerical order
> :the next in number
P :the previous (in thread)
N :the next article (the next thread)
|<:the top of this thread
>|:the next thread
^ :the parent (reply-to)
_:the child (an article replying to this)
>:the elder article having the same parent
<:the youger article having the same parent
---:split window and show thread lists
| :split window (vertically) and show thread lists
~ :close the thread frame
.:the index
..:the index of indices
On May 19, 2006, at 11:24 AM, Madan Manoharan wrote:
> On 5/19/06, nobu / ruby-lang.org <nobu / ruby-lang.org> wrote:
>> Hi,
>>
>> At Fri, 19 May 2006 22:58:28 +0900,
>> Madan Manoharan wrote in [ruby-talk:193553]:
>> > def getATest()
>> > procObj = Proc.new do |id|
>> > @store.delete(id)
>> > end
>> >
>> > t = Test.new()
>> > @store.push(t.__id__)
>> >
>> > ObjectSpace.define_finalizer(t, procObj)
>> > return t.__id__
>> > end
>>
>> Note that procObj also refers t, so this object will never get
>> collected.
>>
>> procObj = @store.method(:delete).to_proc
>>
>> is an alternative.
>
> The procObj does not refer to object 't'.
Even the you don't refer to t by name, procObj's environment knows
about t.
> Please correct me if I am wrong, or if I am missing the obvious (like
> the reference to object 't' in procObj, which I cant see).
You can't see them, but they are there. It is a feature of Ruby.
$ cat x.rb
def x
p = proc { eval('p t') }
t = 5
return p
end
x.call
$ ruby x.rb
5
--
Eric Hodel - drbrain / segment7.net - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant
http://trackmap.robotcoop.com