Default return value for find functions when no match found

For v0.7 the find functions return nothing when no match is found.

Would it be convenient to provide a default parameter to return if no match is found, similar to the get function?

For example:

findlast(!iszero, A, 0)

would return 0 if there is no match.

(then effectively findlast(pred, A) = findlast(pred, A, nothing)


Seems like you could define a similar one line function that does what you want. If the base function returns nothing, you set it to the extra parameter.


The issue with that would be efficiency.
For strings, for example, where any valid index is guaranteed to be > 0, using 0 for the sentinel can be more efficient than returning nothing, and then to have to test for nothing just to turn it back into a 0, seems sad.
(esp. since some of the internal code in base actually returns 0, and then checks for that,
and returns nothing instead!)

Well of course I can define my own methods, but my question was would this be more widely useful.

Is so, there could be a standard implementation in Base, which would obviate separate custom implementations and promote idiomatic use.

In any case, here’s what I’ve defined for my purpose:


Base.findlast(pred::Function, A, default) = 
    (i = findlast(pred, A); i in linearindices(A) ? i : default)


Base.findlast(pred::Function, A, default) =
    (i = findlast(pred, A); i == nothing ? default : i)

And similarly for other find functions.