2

以下是irbshell 中的简单语句。nil输出中的意思是什么?为什么它伴随着if块中的打印语句?

irb(main):062:0> if(x==20 && y==30)
irb(main):063:1> print("if statement working !")
irb(main):064:1> else
irb(main):065:1* print("else statement working !!")
irb(main):066:1> end
if statement working !=> nil # what does nil represent here ?
4

2 回答 2

5

在 Ruby 中,所有表达式都返回值,即使它是nil. 块和方法只返回最后一个计算的表达式的值。有很多方法可以有效地使用它。例如,这就是return经常不使用显式 s 的原因。此外,您可以这样做:

print if x == 20 && y == 30
  'if statement working!'
else
  'else statement working!'
end

关于您的示例:除了按照您的指示打印字符串外,irb还将显示它从 if-else 块收到的值。由于print总是返回nil,因此两个分支都将返回相同的值。

于 2012-06-12T11:47:18.990 回答
2

这意味着您的 if 块不返回值(实际上可以)。例如,以下内容是完全合法且可行的:

foo = if bar > 10
    42
else
    0
end

# now, foo is either 42 or 0
于 2012-06-12T11:25:51.430 回答