Ruby:为什么= if在if语句中求值为true?

时间:2015-02-15 12:34:32

标签: ruby regex if-statement pattern-matching string-matching

我正在学习Ruby并且已经以这种方式看到(和使用)正则表达式匹配:

a = "string9"
if a =~ /\d/
  #do something
end

代码可以工作但是今天我读了关于Regex的文档,并了解到=〜返回字符串中匹配的位置,如果不匹配则返回nil。我认为=〜返回true或false,当= =时返回true表示匹配,false表示不匹配。看来上面代码中的if语句应该被重写:

if /\d/ === a

我已经试过了两个,程序运行没有错误。我只是想了解发生了什么。似乎“如果”将采取除“零”之外的任何事情。我想我的问题不是关于正则表达式,而是关于if语句(和其他布尔语句)如何工作的更多信息。

1 个答案:

答案 0 :(得分:2)

if之后的谓词将被视为布尔值。

在Ruby中,只有falsenil被视为false。其他任何内容都将评估为true,因此0[]{}在布尔上下文中都是true

来自Ruby doc

  

nil和false都是假值。 nil有时用于表示“无值”或“未知”,但在条件表达式中求值为false。

     

true是真正的价值。除了nil和false之外的所有对象都在条件表达式中求值为真值。

您可以查看the control expressions