有关理解Ruby语法的提示,何时使用?,除非

时间:2010-10-25 15:51:15

标签: ruby

关键字unless是否与if相同?

您何时使用?

我见过:

if someobject?

我知道它检查nil是否正确?

5 个答案:

答案 0 :(得分:13)

  

关键字'除非'与'if'相同吗?

不,恰恰相反。

unless fooif !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?

附加'?'这里只表示它返回一个布尔值。