в первом случае вызывающая функция должна проверить код ошибки для ожидаемого сбоя; в последнем случае исключение может быть обработано любым вызывающим абонентом в стеке (или обработчиком по умолчанию), в зависимости от ситуации
Думаю, вы хотите:
@title = tokens[Title]
@title.strip!
Метод #strip!
вернет nil
, если ничего не удалял, и саму переменную, если она была удалена.
Согласно стандартам Ruby, метод с суффиксом восклицательного знака заменяет переменную на место.
Надеюсь, это поможет.
Обновление: Это вывод из irb
, чтобы продемонстрировать:
>> @title = "abc"
=> "abc"
>> @title.strip!
=> nil
>> @title
=> "abc"
>> @title = " abc "
=> " abc "
>> @title.strip!
=> "abc"
>> @title
=> "abc"
Нет необходимости и в раздевании, и в разделении, поскольку полоса также удалит завершающие символы возврата каретки - если только вы не изменили разделитель записей по умолчанию, а это то, что вы пытаетесь пережевывать.
Ответ Оли уже имеет канонический способ сделать это в Ruby, хотя, если вы обнаружите, что делаете это часто, вы всегда можете определить для этого метод:
def strip_or_self!(str)
str.strip! || str
end
Giving:
@title = strip_or_self!(tokens[Title]) if tokens[Title]
Также имейте в виду, что оператор if предотвратит @ title
не будет назначен, если токен равен нулю, что приведет к сохранению его предыдущего значения. Если вы хотите или не возражаете против того, чтобы всегда был назначен @title
, вы можете переместить проверку в метод и еще больше уменьшить дублирование:
def strip_or_self!(str)
str.strip! || str if str
end
В качестве альтернативы, если вы любите приключения, вы можете определить метод в самой строке:
class String
def strip_or_self!
strip! || self
end
end
Дает одно из:
@title = tokens[Title].strip_or_self! if tokens[Title]
@title = tokens[Title] && tokens[Title].strip_or_self!
Я думаю, что ваш пример является разумным подходом, хотя вы могли бы немного упростить его следующим образом:
@title = tokens[Title].strip! || tokens[Title] if tokens[Title]
Альтернативно вы можете поместить его в две строки:
@title = tokens[Title] || ''
@title.strip!