【发布时间】:2020-06-06 18:50:36
【问题描述】:
我有这样的情况:
# 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 未设置为某个有效实例(并且该有效实例也具有@987654330 @方法定义),然后我会得到:
NoMethodError:
undefined method `name' for nil:NilClass
不幸的是,ruby 似乎不会将这样的错误视为false,它会停止执行。
关于如何实现这个目标的任何想法?
(也添加了javascript stackoverflow标签,因为我也欢迎javascript解决方案!)
【问题讨论】:
-
“我也欢迎 javascript 解决方案” – 如果你有 Ruby 代码,这怎么可能有帮助?
-
@Stefan 我想我指的是使用嵌套错误处理“如果它存在就返回它”的一般问题。我觉得无论语言如何,我都会继续遇到这个问题,如果有必要,我也许可以将一些逻辑移交给不同的工具。
标签: javascript ruby conditional-operator or-operator