If the result of the first argument is false or nil, an error is thrown with the second argument as the message.
Since the second argument is only type-checked if the assertion fails, this doesn't have to be a string.
The assertion is successful, and the result of the first argument is returned.
Since the first argument evaluates to false, an error is thrown.