У меня такая ситуация:
# self refers to an instance of a Book class
self.author = instance_of_author_class #returns instance
self.author.name = instance_variable_in_author_instance #returns string
# this is an instance method of the Book class:
def author_name
self.author ? self.author.name : nil #returns string or nil
end
Этот код работает нормально, так как сначала проверяется, есть ли набор author
, затем возвращает его имя или nil
, если нет Автор задан.
Однако я бы хотел сделать это с немного меньшим количеством кода, поскольку я часто нахожусь в ситуации, когда я хочу " просто вернуть вещь, если оно существует". Я не люблю проверять вещь перед тем, как просто вернуть ее. Выражение ||
OR выглядит так, как будто оно будет работать идеально.
def author_name
self.author.name || nil
end
Это будет прекрасно работать, если self.author.name
каким-то образом предварительно инициализировать как false
или nil
, но, к сожалению, если author
не установлен на какой-либо действительный экземпляр (и этот действительный экземпляр также имеет определенный метод name
), тогда я получу:
NoMethodError:
undefined method `name' for nil:NilClass
И, к сожалению, ruby, похоже, не обрабатывать ошибки как false
, выполнение останавливается.
Есть идеи, как мне достичь этой цели?
(добавлен тег javascript stackoverflow, потому что я бы тоже приветствовал javascript решения!)