require 'base64'
require 'time'
t1= Time.new
Base64.encode64('v7J2C5AB0DC85B11FD3qXdyCPC5AB0DC85B11h553enckg')
puts Time.new -t1
这样写会报错
puts Time.new-t1 就正常
#3 楼 @zxzllyj 代码规范 跟语法规则还是有区别的 ,代码不规范,但是一样能运行 比如 https://www.v2ex.com/t/328641#reply90
跟空格无关,你报错是因为 Time.new -t1
中负号被语法解析成了-@
,你可以用 Time.new <=>t1
这种不会引起歧义的方法去测试,顺便说一句,这种报错一般给出的报错信息应该说的很详细了
幸好是报错。
有的时候,像你这么写不会有错,但行为却和你想象中的不一样,那就更难搞了。
例如:
arr = [1, 2, 3]
arr.last +1 # => [3]
arr.last + 1 # => 4
不要吝惜空格和括号。
不,调用没有参数的方法时,一般是不加括号的;而调用有参数的方法时,是推荐加上括号的。
一般来说,是写 Time.new - t1
,而不是Time.new() -t1
。
不是什么代码规范性的问题。如果明白+@
、-@
的话,很容易搞清楚。
Array#last(n)
返回数组的最后 n
个元素。显然这会返回一个数组。
连在一起的 +1
在这里就是(正) 1
,于是返回了 [3]
。