[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Difference between nil? vs. (variable != nil)...

Jason Vogel

12/6/2006 5:19:00 PM

Source A :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
if (product_coverage.external_description != nil)
product_coverage.external_description.capitalize!
end
end
end

Source B :

if (@product_coverages != nil && @product_coverages.length > 0)
@product_coverages = @product_coverages.each do
|product_coverage|
product_coverage.external_description =
Coverage.find(product_coverage.coverage_id).external_description # test
return "" if product_coverage.external_description.nil?
product_coverage.external_description.capitalize!
end
end

I wanted to use Source B, but it return "" everytime. But Source A
works. I expected both of them to work.

Jason

2 Answers

Martin DeMello

12/6/2006 5:37:00 PM

0

On 12/6/06, Jason Vogel <jasonvogel@gmail.com> wrote:
> Source A :
>
> if (@product_coverages != nil && @product_coverages.length > 0)
> @product_coverages = @product_coverages.each do
> |product_coverage|
> product_coverage.external_description =
> Coverage.find(product_coverage.coverage_id).external_description # test
> if (product_coverage.external_description != nil)
> product_coverage.external_description.capitalize!
> end
> end
> end
>
> Source B :
>
> if (@product_coverages != nil && @product_coverages.length > 0)
> @product_coverages = @product_coverages.each do
> |product_coverage|
> product_coverage.external_description =
> Coverage.find(product_coverage.coverage_id).external_description # test
> return "" if product_coverage.external_description.nil?
> product_coverage.external_description.capitalize!
> end
> end
>
> I wanted to use Source B, but it return "" everytime. But Source A
> works. I expected both of them to work.

Put in a test print, to see what nil? is returning. It is possible for
a class to override nil?, though it's hard to think of why one would.

martin

William James

12/10/2006 5:42:00 PM

0

Jason Vogel wrote:
> Source A :
>
> if (@product_coverages != nil && @product_coverages.length > 0)
> @product_coverages = @product_coverages.each do
> |product_coverage|
> product_coverage.external_description =
> Coverage.find(product_coverage.coverage_id).external_description # test
> if (product_coverage.external_description != nil)
> product_coverage.external_description.capitalize!
> end
> end
> end
>
> Source B :
>
> if (@product_coverages != nil && @product_coverages.length > 0)
> @product_coverages = @product_coverages.each do
> |product_coverage|
> product_coverage.external_description =
> Coverage.find(product_coverage.coverage_id).external_description # test
> return "" if product_coverage.external_description.nil?
> product_coverage.external_description.capitalize!
> end
> end
>
> I wanted to use Source B, but it return "" everytime. But Source A
> works. I expected both of them to work.
>
> Jason

if @product_coverages != nil
@product_coverages.each { |p_c|
p_c.external_description =
Coverage.find(p_c.coverage_id).external_description and
p_c.external_description.capitalize!
}
end

-------------

A simpler way. When a description that's nil is encountered,
replace it with "".

if @product_coverages != nil
@product_coverages.each { |p_c|
p_c.external_description =
(Coverage.find(p_c.coverage_id).external_description or "").
capitalize
}
end