Как вызвать исключение, если оценка возвращает ноль в Ruby? - PullRequest
0 голосов
/ 23 мая 2018

Я хочу сделать что-то вроде этого:

lookup_value = :f
dict = {a: 20, b: 30, c: 40}
res = dict[lookup_value] | raise 'not found'

Как и в приведенном выше примере, если ключ не найден в словаре, я хочу вызвать ошибку.Я мог бы просто иметь дополнительную строку, которая говорит raise 'not found' unless res, но я действительно хочу использовать поиск в выражении:

output = 'prefix' + (dict[lookup_value] | raise 'not found')

Проблема в том, чтоиспользование raise таким образом не является допустимым синтаксисом.Я ищу способ, которым я могу вызвать ошибку в выражении, если поиск значения в хэше завершился неудачно, без необходимости объявления дополнительных переменных или предварительной проверки.

Ниже приведен действительный синтаксис и будетвыдает исключение, если значение не найдено, но возвращает nil, когда значение найдено:

res = (raise 'not found' unless dict[lookup_value])

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Это должно исправить нулевое возвращение при обнаружении значения.

Изменение этого значения:

res = (raise 'not found' unless dict[lookup_value])

на это:

raise 'not found' unless res = dict[lookup_value]
0 голосов
/ 23 мая 2018

В дополнение к @matthewd вы можете управлять raise с помощью fetch следующим образом:

dict.fetch(lookup_value) { raise 'not found' }
0 голосов
/ 23 мая 2018

dict.fetch(lookup_value) похоже на dict[lookup_value], но будет повышаться, если ключ отсутствовал.

Вы также можете сделать примерно то же, что и в вопросе, с помощью нескольких настроек: dict[lookup_value] || raise('not found') -это дает вам контроль над исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...