From: Austin Ziegler Date: 2002-11-12T05:55:50+09:00 Subject: Re: What the...? On Tue, 12 Nov 2002 05:47:09 +0900, Kent Dahl wrote: > Johan Persson wrote: >> Take a look on the snippet below >> # points is an array of structure-objects defining a point >> points[0].x = 5 >> points[0].y = 4 >> 1.upto(points.length) { |i| >> points[i].x = points[i-1].x >> points[i].y = points[i-1].y >> } >> >> Now that looks like a legal bunch of statements, right? The thing >> is every time Ruby interpret the line 'points[i].x = >> points[i-1].x' it stops, giving me nothing but a cryptic error >> message, 'undefined method `x=' for nil (NameError)'. Could >> someone please tell me what's going on? > Array indexing starts at 0. > 1.upto iterates _including_ points.length, which doesn't exist, > meaning [] returns nil... and you can guess the rest. > > Try > 0.upto(points.length-1) { |i| > instead. Actually, becuase he's manually handling index 0, he would want: 1.upto(points.length - 1) { |i| ... } -austin -- Austin Ziegler, austin@halostatue.ca on 2002.11.11 at 15.54.29