关键字unless
是否与if
相同?
您何时使用?
?
我见过:
if someobject?
我知道它检查nil是否正确?
答案 0 :(得分:13)
关键字'除非'与'if'相同吗?
不,恰恰相反。
unless foo
与if !foo
if someobject?
我知道它检查nil是否正确?
没有它调用名为someobject?
的方法。即?
只是方法名称的一部分。
?
可以在方法名中使用,但仅作为最后一个字符。通常,它用于命名返回布尔值的方法(即true或false)。
?
也可以用作条件运算符condition ? then_part : else_part
的一部分,但这不是它在您的示例中的使用方式。
答案 1 :(得分:2)
unless
实际上与if
相反。 unless condition
相当于if !condition
。
您使用哪一个取决于您在代码中表达的意图更自然。
e.g。
unless file_exists?
# create file
end
VS
if !file_exists?
# create file
end
关于?
,Ruby中的布尔方法有一个约定,以?
结束。
答案 2 :(得分:2)
我认为?
- 后缀的约定是在命名返回布尔值的方法时使用它。它不是一个特殊的字符,但用于使方法的名称更容易理解,或者至少我认为这是意图。要明确这个方法就像问一个问题:它不应该改变任何东西,只能返回某种状态......
还有!
- 后缀,我认为按惯例意味着该方法可能有副作用或可能修改它被调用的对象(而不是返回修改后的副本)。无论哪种方式,!
都会让您仔细考虑调用这样的方法,并确保您了解该方法的作用。
我认为没有什么强制执行这些约定(我从来没有尝试过打破它们)所以当然你可能会滥用它们,但你的开发人员不会很乐意使用你的代码
unless
请参阅此处:http://railstips.org/blog/archives/2008/12/01/unless-the-abused-ruby-conditional/
答案 3 :(得分:2)
本声明:
unless conditional expression
相当于:
if not (conditional expression)
在Ruby中,您可以使用问号结束您的方法名称,该问号通常用于表明它是一个布尔方法。 使用Rails,对nil的检查将如下所示:
someobject.nil?
这会调用对象的nil?()方法,该方法对NilObject返回true,对其他任何内容返回false。
答案 4 :(得分:0)
if someobject?
附加'?'这里只表示它返回一个布尔值。