Есть ли способ сделать эту функцию в одном выражении?Объединить два оператора с возвратом в один в Ruby
def test
err = _invalid_permission
return err if err # this statement
# do something else
end
Я пробовал:
def test
return (err = _invalid_permission) if err
# do something else
end
, но это отличается, err
после if
всегда nil
Или это один:
def test
return err if (err = _invalid_permission)
# do something else
end
, но это одна вызывает undefined local variable or method 'err'
.
объяснение того, что я пытаюсь сделать, это сократить такого рода метод:
def test
err = _invalid_permission
return err if err
err = _check_another_error
return err if err
err = _and_another_one
return err if err
# and lots more
# do something else when not error
return nil
end
_invalid_permission
, _check_another_error
и _and_another_one
вернется непустая строка или массив или хэш, содержащий сообщение об ошибке.
другая история, после просмотра ответов ниже, я думаю, что он может объединить в:
def test
err = _invalid_permission ||
_check_another_error ||
_and_another_one
# and lots more
return err if err
# do something else when not error
return nil
end
Я думаю, что оригинал довольно хорош, и вы слишком беспокоитесь о преждевременной оптимизации. Другие будут проблемой чтения, и присвоение значений в условном тесте заставит меня кричать. –
Явный лучше, чем неявный. – squiguy
Этот код не имеет никакого смысла. Что ты пытаешься сделать? – Chuck