我遇到了这行代码,无法理解点的目的。有人可以解释65 . + rand(10)
中的点正在做什么,以及它与65 + rand(10)
有何不同?
对于完整的上下文,我在这个8字符随机字符串生成器中看到了这段代码:
(0...8).map{65.+(rand(25)).chr}.join => "QSILUSPP"
(0...8).map{65.+(rand(25)).chr}.join => "BJIIBQEE"
(0...8).map{65.+(rand(25)).chr}.join => "XORWVKDV"
答案 0 :(得分:2)
您可以注意到,在原始代码中有2个方法调用 - +
和chr
。我可以通过等效代码显示它:
65.send(:+, rand(10)).send(:chr) # is the equal to following line:
65.+(rand(10)).chr
这个技巧产生方法链,允许跳过括号。使用括号,65.+(rand(10)).chr
可以这样写:
(65 + rand(10)).chr
如果没有这个技巧,chr
将适用于rand(10)
,结果字符串将尝试添加到65.它将产生TypeError:
65+(rand(25)).chr
TypeError: String can't be coerced into Fixnum
答案 1 :(得分:1)
没有任何不同。由于数字是Ruby中的对象,+
实际上是一个方法调用,因此可以像任何其他方法一样使用点语法。您过去常常看到的表单65 + rand(10)
是"语法糖"相当于65.+(rand(10))
。
为什么有人会使用.+
编写代码,我不知道。