------ art_96271_18320883.1163353479616 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 11/12/06, David Vallner <david / vallner.net> wrote: > > 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 which > > brings 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). agreed but see JEGII remark about warnings 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. 501/2 > ruby -e 'puts Array.new[nil]' -e:1:in `[]': no implicit conversion from nil to integer (TypeError) from -e:1 Given that I rather think that (a) @registry["memory"] is referencing an Array object and (b) @registry["context"][1] evaluates to nil That was the question OP, or was it not? Now if you really want to shoot yourself into your leg here is the gun: class GunArray < Array def [] *args, &block super(*args,&block) rescue nil end end end you could also monkeypatch Array but I am too lazy to look if its method_alias or alias_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? That is definitely my advice too, but I am less strict ;) David Vallner > > > > Cheers Robert -- The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. - George Bernard Shaw ------ art_96271_18320883.1163353479616--