From: Eric Hodel Date: 2004-06-03T10:55:04-07:00 Subject: Re: A question about GC --CQDko/0aYvuiEzgn Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Sam Sungshik Kong (ssk@chol.nospam.net) wrote: > Hello! >=20 > While I was making my own utility functions, I met an interesting situati= on. > I want to know how to solve this kind of problem. >=20 > I want to use Excel from ruby using OLE. > To make steps simple, I created functions to open excel and close it. >=20 > get_excel function has no problem. > I call it like > xl =3D get_excel >=20 > When I'm done with it, I want to close it and unload it from memory. > The right procedure is >=20 > xl.quit > xl =3D nil > GC.start >=20 > I want to make a function for the 3 steps. >=20 > def quit_excel(xl) > xl.quit > xl =3D nil > GC.start > end >=20 > When I call it, I do >=20 > quit_excel(xl) #don't work as expected >=20 > As you know, the argument is call-by-value and even if I set nil to xl, t= he > outer reference is still referencing Excel. > So GC won't collect it. >=20 > How can I solve this problem? def with_excel xl =3D get_excel yield xl ensure xl.quit xl =3D nil GC.start end =2E.. with_excel do |xl| ... # your code end --=20 Eric Hodel - drbrain@segment7.net - http://segment7.net All messages signed with fingerprint: FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04 --CQDko/0aYvuiEzgn Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (FreeBSD) iD8DBQFAv2X4MypVHHlsnwQRAsStAKDgAxeTon25T8M6NjaahDPznBmWGQCfa72z 8ShPx8ur+KAdjNPpkzjmD7Q= =gAHo -----END PGP SIGNATURE----- --CQDko/0aYvuiEzgn--