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