--------------enig38CC852C2FED546CA91A3E9B Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Sebastian Reid wrote: > Hi all. > > I've been working on some Ruby projects using the Rails framework > and getting on well, however recently I've started on some projects > using Ruby alone and have run into some issues as the task gets a little > more complicated. > > One particular script is giving me trouble and I suspect it is due > to my Perly ways. Below is a pastebin of the code. As some I'm sure > can tell, it is an rbot plugin that right now doesn't do a whole lot. > > http://pastebin.com/822611 > > The highlighted line is flagging up the error: > > TypeError: no implicit conversion from nil to integer > > on line 18 (highlighted). > > Now this is looking to me like a variable instantiation issue whichrings us back to Perl. In Perl that line would be perfectly legal > (though some would debate its elegance) and hashes and arrays would be > created as and when required. > In Ruby, only instance variables are autovivified to nil, and that by itself is a behaviour that gets on my nerves (typo-prone). From the code it looks @registry should be an object (maybe use a Struct) instead of a Hash, and you should preinitialise its contents to empty arrays and whatnot in its initialize method. > > I'm willing to accept that this may not be the best way to do things > in Ruby, thus I come to you to ask for a quick rundown on best practices > in these situations. > > I've played around with default procs and the like in the > initialisation routine to no avail. Using blocks to initialize hashes / arrays is fine when not nested, otherwise things get messy. Clean up your data structure initialisation to be explicit? David Vallner --------------enig38CC852C2FED546CA91A3E9B Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (MingW32) iD8DBQFFV1eAy6MhrS8astoRAl2JAJ0R3f8MDV/VCx2/OhT+1Mxag1vAcgCfRfDG ZpGORMhRTE0zP3StHYb3oNU 3T -----END PGP SIGNATURE----- --------------enig38CC852C2FED546CA91A3E9B--