我碰到这行代码,不明白这个点的目的。有人能解释一下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"

最佳答案

您可以注意到,在原始代码中有两个方法调用-+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。会产生类型错误:
65+(rand(25)).chr
TypeError: String can't be coerced into Fixnum

09-25 17:54
查看更多