You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There are a couple of things wrong with the this piece of code.
method.arity only represents total number of positional args. 1 is added and the arity is negated if there is an optional/named argument. We should not be depending on method arity and picking a particular positional argument because it's impossible to tell whether the intent was to pass a value for the optional arg or true flag to memoist.
e.g.
def self.foo(a, b=1, c=2, d=3, e:4)
end
In this case the arity of foo will be -2.
Because of what's mentioned above, this not only misses the reload flag but also incorrectly modifies the arguments of a method that was only passed a true value for one of the optional args.
We should use a special named parameter memoist_reload always and not depend on arity at all. We could still use arity when it's positive for backward compatibility (because that's the only case when memoization is actually working even now.).
The text was updated successfully, but these errors were encountered:
Memoization is currently broken for methods with optional args. The piece of code under question is:
There are a couple of things wrong with the this piece of code.
true
flag to memoist.e.g.
In this case the arity of
foo
will be -2.We should use a special named parameter
memoist_reload
always and not depend on arity at all. We could still use arity when it's positive for backward compatibility (because that's the only case when memoization is actually working even now.).The text was updated successfully, but these errors were encountered: