Skip to content

Latest commit

 

History

History
41 lines (30 loc) · 1.42 KB

UninitializedLocal.md

File metadata and controls

41 lines (30 loc) · 1.42 KB

Method call on nil

Description

In Ruby, it is not necessary to explicitly initialize variables. If a local variable has not been explicitly initialized, it will have the value nil. If this happens unintended, though, the variable will not represent an object with the expected methods, and a method call on the variable will raise a NoMethodError.

Recommendation

Ensure that the variable cannot be nil at the point hightligted by the alert. This can be achieved by using a safe navigation or adding a check for nil.

Note: You do not need to explicitly initialize the variable, if you can make the program deal with the possible nil value. In particular, initializing the variable to nil will have no effect, as this is already the value of the variable. If nil is the only possibly default value, you need to handle the nil value instead of initializing the variable.

Examples

In the following code, the call to create_file may fail and then the call f.close will raise a NoMethodError since f will be nil at that point.

def dump(x)
  f = create_file
  f.puts(x)
ensure
  f.close
end

We can fix this by using safe navigation:

def dump(x)
  f = create_file
  f.puts(x)
ensure
  f&.close
end

References