John Joyce
10/16/2007 9:16:00 PM
On Oct 16, 2007, at 11:40 AM, Robert Klemme wrote:
> On 15.10.2007 20:38, Konrad Meyer wrote:
>> Quoth Robert Klemme:
>>> On 15.10.2007 19:41, Simon Schuster wrote:
>>>> it seems that I have to run it a couple different times for it to
>>>> work.. array.length = 16576, if that could be a potential
>>>> problem. if
>>>> it is, how do I work around it?
>>>>
>>>> 077:0> array = File.read("/text.txt").to_a.each { |x| x.chomp! }
>>>> 080:0> array.each_with_index { |x,y|
>>>> array.delete_at(y) if x.empty? == true
>>>> }
>>>>
>>>> still leaves me with plenty of empty array items
>>>> 080:0> array[-3]
>>>> ""
>>> Your bug is in the loop: you iterate and delete at the same time
>>> which will likely yield strange results (as you observe). Why
>>> don't you just do
>>>
>>> array.delete_if {|x| x.empty?}
>>>
>>> Btw, empty? == true is quite dangerous because in Ruby "true" is
>>> not the only valid value for true.
>> But !!e.empty? == true will do the trick :D.
>
> I've seen the smiley but, frankly, I find this only moderately
> funny. The reason is that there are too many people around that
> think comparing boolean values is a great idea. This is at least
> superfluous and often outright dangerous. Other people then will
> have to debug those bugs...
>
> Cheers
>
> robert
>
Well, in this case it may be just naive.
In many languages you might have to do something like that.
No big deal.
Comparing a boolean method to a boolean value will only ever return a
boolean.
Can't go wrong.
If it is set up right it could be convenient if there is a chance of
a nil value, because nil == true returns false.
But the condition is still in .empty?