= Solution
Find the entry once and check the abstract membership <precondition> on that result:
``
def recall(name: String): String = {
val entry = find(name, table(hash(name)))
require(entry != null, "name is not in the book")
entry.number
}
``
The check turns an invalid call into an explicit <precondition> failure rather than an accidental null dereference or an invented default number. For a valid call, the unique matching entry contains exactly the mapped value, so \b[the stored number is returned and the map is unchanged]. Testing membership by calling `isInBook` first would traverse the same bucket twice; retaining the found reference avoids that redundant work.
Back to article page