[ACCEPTED]-How to check if a variable exists with a value without "undefined local variable or method"?-exists
Accepted answer
Change the present?
to != ''
and use the && operator 4 which only tries to evaluate the seond expression 3 if the first one is true:
if defined?(mmm) && (mmm != '') then puts "yes" end
But actually as 2 of 2019 this is no longer needed as both 1 the below work
irb(main):001:0> if (defined? mm) then
irb(main):002:1* if mm.present? then
irb(main):003:2* p true
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> if (defined? mm) then
irb(main):007:1* p mm
irb(main):008:1> end
=> nil
On Ruby on Rails
if defined?(mm) && mm.present?
puts "acceptable variable"
end
On IRB
if defined?(mm) && !mm.blank? && !mm.nil?
puts "acceptable variable"
end
It can make sure you 6 won't get undefined variable or nil or empty 5 value.
Understand how defined?
works
a = 1
defined?(a) # => "local-variable"
b = nil
defined?(b) # => "local-variable"
c = ""
defined?(c) # => "local-variable"
d = []
defined?(d) # => "local-variable"
$e = 'text'
defined?($e) # => "global-variable"
defined?(f) # => nil
defined?($g) # => nil
Note that defined?
checks variable in the 4 scope it is.
Why you need defined?
When there is possible of undefined 3 variable presence, you cannot just check 2 it with only .nil?
for eaxample, you will have 1 a chance to get NameError.
a = nil
a.nil? # => true
b.nil? # => NameError: undefined local variable or method `b'
Source:
stackoverflow.com
More Related questions
Cookie Warning
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.