Использование безопасного оператора Ruby с более чем - PullRequest
3 голосов
/ 06 марта 2019

Я пытаюсь выяснить, как использовать безопасный оператор Ruby в следующем сценарии:

if attribute_value && attribute_value.length > 255

Следующее не работает, если attribute_value равно nil:

if attribute_value&.length > 255

# NoMethodError: undefined method `>' for nil:NilClass

Я понимаю почему, но я хотел бы знать, как мне обойти это.Следующее работает, но чертовски ужасно:

if attribute_value&.(length > 255)

Какой рекомендуемый способ сделать это?Я думаю, я мог бы сделать следующее:

if attribute_value&.length.to_i > 255

Это не так уж плохо для этой ситуации.Что-нибудь еще?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

В качестве прямого ответа на заданный вопрос вы можете напрямую использовать оператор безопасной навигации, поскольку x > y действительно просто вызывает > метод объекта x.То есть x > y - это то же самое, что и x.>(y) или x.send(:>, y)

. Поэтому вы можете использовать x&.> y.Или, в вашей ситуации, attribute_value&.length&.> 255

Лично я бы предпочел attribute_value && attribute_value.length > 255, но, возможно, это только я.

1 голос
/ 06 марта 2019

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

Ваш подход:

attribute_value&.length.to_i > 255

Кажется достаточно разумным, если nil означает "не выходя за пределы".

Часто я справляюсь с такими условиями охраны, как:

return unless attribute_value

if attribute_value.length > 255
  # ... Handle condition
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...