if /除了修饰符的值是多少?

时间:2013-02-15 18:34:52

标签: ruby

我找不到if(或unless)修饰符的正式规范:

123 if x > 0

如果x不高于零,上述陈述的价值是多少? irb建议nil,但它是否记录在哪里?

(是的,这可能是一个愚蠢的问题,对不起,找不到规格)。

2 个答案:

答案 0 :(得分:5)

未评估的表达式与不存在的表达式相同。并且您的条件应该是某些代码块的一部分,例如定义或主要环境等。没有内容的代码块将被评估为nil

class A; end
# => nil

def foo; end
foo
# => nil

()
# => nil

begin; end
# => nil

eval("")
# => nil

因此,您的示例返回nil的原因与条件本身无关。这只是因为没有评估。

答案 1 :(得分:3)

是的,它是nil。还有什么可以回归? if子句中的语句用于if本身,并且不执行then语句。没有任何回报,所以nil

Relevant spec

it "returns nil if else-body is empty and expression is false" do
  if false
    123
  else
  end.should == nil
end