新手问题 方法后面不能留空格吗?

tablecell · 2016年12月16日 · 最后由 hexawing 回复于 2017年05月09日 · 5126 次阅读
require 'base64'
require 'time'



t1= Time.new
Base64.encode64('v7J2C5AB0DC85B11FD3qXdyCPC5AB0DC85B11h553enckg')
puts Time.new -t1

这样写会报错

puts Time.new-t1 就正常

puts Time.new - t1

#1 楼 @zealinux 这是语法规则吗?

#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

不要吝惜空格和括号。

#4 楼 @tablecell 哈,一般我不这么写,所以这个问题我还真没遇上过,从开始写代码起就执行代码规范的表示没遇上过这个坑。。。

#6 楼 @sticnarf 规范的写法是方法加 () puts Time.new() -t1 puts arr.last() +1

如果靠加一空格和少一空格来维护代码规范性,这个太另类了

#8 楼 @tablecell

不,调用没有参数的方法时,一般是不加括号的;而调用有参数的方法时,是推荐加上括号的。

一般来说,是写 Time.new - t1,而不是Time.new() -t1

不是什么代码规范性的问题。如果明白+@-@的话,很容易搞清楚。

sticnarf 回复

请教一下,前一句[3]是怎么来的啊……连在一起写的+1表示别的意思?

hexawing 回复

Array#last(n) 返回数组的最后 n 个元素。显然这会返回一个数组。

连在一起的 +1 在这里就是(正) 1,于是返回了 [3]

sticnarf 回复

明白了,空格就是带参数的方法,变成了last(1),最后一个数

需要 登录 后方可回复, 如果你还没有账号请 注册新账号