Ruby 中除法运算符上带空格的文字与变量

Literal vs variable with spaces on divide operator in Ruby

假设我有一个文字 Fixnum 1420028751000,我想使用它进行转换:

Time.at(1420028751000 / 1000) # => 2014-12-31 20:25:51 +0800

我也可以放空格,假设我是初学者并且我的编码不好:

Time.at(1420028751000      /     1000)
Time.at(1420028751000 /1000)

所有这些工作正常并给我正确的结果。

然而,一旦我引入了变量:

a = 1420028751000
Time.at(a/1000)   # => Works!
Time.at(a / 1000) # => Works!
Time.at(a /1000)  # => Strange thing happen

我的问题是,/1000 有什么独特之处导致在 Ruby 中引入变量时它不起作用?

Ruby 的解析器将 /1000 解释为文字正则表达式的开头,因为 a 是一个可能是方法的标记。也就是说,假设 a 是一个方法:

def a(arg); end

Time.at(a /1000)

Ruby 会将其解释为 "a invoked with an incomplete regexp as the argument"。对于 "complete" 此调用,Ruby 期待您可能想要执行以下操作:

Time.at( a(/1000/) )