------ art_11083_18124801.1152456804376 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 7/10/06, dblack / wobblini.net <dblack / wobblini.net> wrote: > > Hi -- > > On Sun, 9 Jul 2006, Dark Ambient wrote: > > > On 7/9/06, dblack / wobblini.net <dblack / wobblini.net> wrote: > > > >> > >> There's no issue of nil being smaller or larger than anything. The > >> first time through your loop, lowest is nil -- which means that the > >> item < lowest comparison is never evaluated. > > > > > > Okay, I sort of see that. > > > > The next time through, > >> lowest is "five", so item < lowest is evaluated. It's false, so the > >> next statement (lowest tem) is not executed. > > > > > > Don't get this looking at the 'if' statement > > > > if lowest nil || item < lowest > > lowest tem > > > > First confusion is || , this I take to be 'or' ? Dark, || is another form of or See the docs here for a full run down http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UG > Second, if the assignment of 'lowest tem' comes after the 'if' > > conditional, how does any 'tem become the lowest. The way I'm reading > the > > statement (using the array - mylist 'five', 'eight', 'one', 'ten', > > 'nine']) I interpret the second iteration as > > if lowest nil or 'five' < lowest # lowest is still equal to > nil ? > > Or could it be that in the 'if' block, the 'lowest tem' is set before > the > > 'if conditons' are checked ? > > No, definitely not. It's all very linear: > > if <some expression is true> > do this > end > > If the expression isn't true, then "do this" never gets executed. > > You might put some extra output in your loop, so you can see what's > going on: > > > def sort(list) > sorted ] > unsorted ] > > lowest il > > list.each do |item| > puts "Comparing #{item.inspect} (item) to #{lowest.inspect} (lowest)" > if lowest nil || item < lowest > puts "Either lowest is nil, or #{item.inspect} is less than #{ > lowest.inspect}" > puts "So lowest is now being set to #{item.inspect}" > lowest tem > end > end > > puts "Loop finished: lowest is #{lowest.inspect}" > sorted.push(lowest) > puts sorted > > end > mylist 'five', 'three', 'one', 'ten', 'eight'] > sort mylist > > The output is: > > Comparing "five" (item) to nil (lowest) > Either lowest is nil, or "five" is less than nil > So lowest is now being set to "five" > Comparing "three" (item) to "five" (lowest) > Comparing "one" (item) to "five" (lowest) > Comparing "ten" (item) to "five" (lowest) > Comparing "eight" (item) to "five" (lowest) > Either lowest is nil, or "eight" is less than "five" > So lowest is now being set to "eight" > Loop finished: lowest is "eight" > > > David > > -- > http://www.rubypowerandlight.com Ruby/Rails training & consultancy > http://www.manning.com/black RUBY FOR RAILS, the Ruby book for > Rails developers > http://dablog.rubypal.com D[avid ]A[. ]B[lack's][ Web]log > dblack / wobblini.net me > > ------ art_11083_18124801.1152456804376--