From: Benoit Daloze Date: 2010-10-22T04:23:10+09:00 Subject: Re: more idiomatic way to avoid errors when calling method on variable that may be nil? On 21 October 2010 07:05, w_a_x_man wrote: > On Oct 11, 3:02 pm, Charles Calvert wrote: >> I'm using Ruby 1.8.7 patchlevel 249 >> >> Is there a more idiomatic way to do the following? >> >> var = hash[key].nil? ? nil : hash[key].downcase >> >> Note that if hash[key] is nil, I want nil assigned to var, so this >> won't work: >> >> var = hash[key].downcase unless hash[key].nil? >> >> Obviously I could do this, but I'm trying to keep it on one line: >> >> var = hash[key] >> var = var.downcase unless var.nil? >> > > var = (t = h[key] and t.upcase) or nil h[key] will return nil if key is not found, so you do not need that "or nil" var = (t = h[key] and t.upcase) > var = h[key].tap{|x| x ? x.upcase : nil} That is not gonna work, Object#tap return receiver. So the only way to modify the object "tapped" is to call mutating methods on it: var = h[key].tap { |x| x ? x.upcase! : nil }