From: Eric Mahurin Date: 2005-05-07T23:22:19+09:00 Subject: Re: object reference handle (like perl's reference to scalar) I see you modified my example. This doesn't do what the traditional reference/pointer does in other languages. With a traditional reference/pointer you do something like this: C Ruby with Eric's reference.rb -------------- ----------------------------- p = &var p = ref{:var} *(p)=value p[]=value # changes var *(p)==var p[]==var What you did just appears to create a wrapper around objects to allow you to make mutable objects out of immutable ones. I think this is useful, but not a reference/pointer. But, I am still taking the idea to create a reference like this: x.ref This will make a reference that uses replace/become to set the object. It cannot genernally be used - especially for immediates. Here are the various ways my code can create a reference now: ref{:x} # reference to the variable x x.ref # reference to the object in x ref{"x[1]"} # reference to the assignable expression x[1] x.ref[1] # reference to the methods [] and []= with 1 as an arg x.ref("[]",1) # same x.ref([:"[]",1],[:"[]=",1]) # same - independet get/get Reference.new(proc{x[1]},proc{|v|x[1]=v}) # explicit get/set With the exception of the first 2, the rest of the references will behave the same way - operating on x[1]. --- Dave Burt wrote: > > # silly example as x,y = y,x would be better > > ... > > C:\>ruby > require 'ref' > def swap(a,b) > tmp = a[] > a[] = b[] > b[] = tmp > end > x = 1.ref > y = 2.ref > swap(x, y) > p x > p y > x = "hi".ref > y = "world".ref > z = x > swap(x, y) > p x > p y > p z > ^Z > 2 > 1 > "hi" > "world" > "hi" Discover Yahoo! Stay in touch with email, IM, photo sharing and more. Check it out! http://discover.yahoo.com/stayintouch.html