'How to handle memoization with nil values with Sorbet?
I have this method:
def current_organization
return @current_organization if defined?(@current_organization)
subdomain = request.subdomain.to_s
return @current_organization = nil if subdomain.blank?
return @current_organization = nil if Allowable::DeniedSlugs.include?(subdomain)
@current_organization = Organization.find_by(slug: subdomain)
end
Because this file is typed: strict
, I need to declare @current_organization
, but this would mean that checking defined?
would always be true. What is the correct pattern for handling nil
for methods like this
Solution 1:[1]
You will have to declare @current_organization
after checking defined?
which can be done just above the find_by
call
def current_organization
return @current_organization if defined?(@current_organization)
...
@current_organization = T.let(@current_organization, T.nilable(Organization))
@current_organization = Organization.find_by(slug: subdomain)
end
Example on sorbet.run
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Daniel Gilchrist |