这一行代码中的点是什么意思:65。+ rand(10)

时间:2014-10-19 22:31:32

标签: ruby

我遇到了这行代码,无法理解点的目的。有人可以解释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"

2 个答案:

答案 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))

为什么有人会使用.+编写代码,我不知道。