Избегая null в переменную назначения


Я хочу получить пустую строку или строковое значение объекта

Какой код вы используете и почему?

value = object.to_s

или это

value = object.nil? ? "" : object


10308
3
задан 25 января 2011 в 10:01 Источник Поделиться
Комментарии
5 ответов

Если объект является либо нулевой , либо строку, вы можете просто сделать значение = объект || "".

Если это может быть что угодно и вы хотите получить строку, ваш второй вариант на самом деле не делать то, что вы хотите, так как это не превратить объект в строку, если оно не равно nil. Чтобы исправить ваше второе решение станет значение = объект.шь? ? объект.to_s : "". Конечно, так как теперь ты называешь to_s в обоих решениях нет никаких оснований предпочесть второго над первым, так что я предпочту первый.

12
ответ дан 25 января 2011 в 11:01 Источник Поделиться

Я читал здесь(act_as_good_style) (поиск .шь? первое появление), что вы не должны проверять .шь? если вы действительно хотите проверить, что а если вы хотите знать, если объект стоимостью вы должны пойти на что-то подобное

value = object ? object.to_s : ''

Что кстати очень хорошо вписывается в мою политику стандартное поведение первой(за исключением очень короткого кода первый, когда еще заявление слишком долго).

5
ответ дан 25 января 2011 в 11:01 Источник Поделиться

Я бы сделал:


в = объект.to_s

шь.to_s возвращает "".

Помню, ноль-это тоже объект в Ruby.

4
ответ дан 26 января 2011 в 10:01 Источник Поделиться

В вашем конкретном случае, используя объект.to_s, вы на самом деле не нужно проверять на ноль вообще, так как Рубин обрабатывает это для вас. Если объект не пропустит , он будет возвращать пустую строку.

Доказательства от ирб:


  • объект = шь # => шь

  • объект.to_s # => ""

  • объект = объект.новый # => #

  • объект.to_s # => "#"

3
ответ дан 26 января 2011 в 10:01 Источник Поделиться

Я хотел сделать это лично:

value = object unless onject.nil?

Это кажется немного более выразительные для меня. Его-то мне жаль, что мы могли бы сделать в C++, не используя тернарный оператор.

2
ответ дан 26 января 2011 в 10:01 Источник Поделиться