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/) )
假设我有一个文字 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/) )