我是Ruby的新手,我无法理解这段代码:
3 gave 6
4 gave 10
5 gave 18
6 gave 36
我知道它会从0-9生成一个随机数。但它与.map方法有什么关系呢。它试图在这里演出什么?此外,代码是否始终是唯一的?任何解释都非常感谢。
答案 0 :(得分:4)
code = (0...16).map { rand(10).to_s }.join
用于生成包含(0到9)长度为16的随机字符串。.map
将返回一个数组,其长度为迭代次数(此处为16次)。 .join
用于加入所有这些16
元素&返回一个字符串
2.2.4 :004 > code = (0...16).map {rand(10).to_s}
=> ["9", "2", "7", "4", "8", "2", "2", "9", "0", "8", "5", "1", "3", "2", "7", "8"]
2.2.4 :005 > code = (0...16).map {rand(10).to_s}.join
=> "8371524929956722"
2.2.4 :006 > code = (0...16).map {rand(10).to_s}.join
=> "4111661481960314"
2.2.4 :007 >
您也可以使用以下内容生成相同的结果
code = rand(10 ** 16).to_s
=> "7066995392533658"
2.2.4 :011 > code = rand(10 ** 16).to_s
=> "9149902415985481"
答案 1 :(得分:2)
code = (0...16).map { rand(10).to_s }.join
上面的代码生成0到9次的随机数16次,并返回生成的随机数的字符串。
为了清楚地理解,让我们分解各个代码组件。
(0...16)
这将创建一个从0到15的整数范围。
(0...16).map { code-block }
这将为范围中的每个元素执行代码块并返回输出。此操作的结果是一个新数组,其中包含为每个元素计算的输出。
rand(10)
这会生成大于或等于0但小于10的随机整数。
rand(10).to_s
这会将生成的整数转换为字符串。
(0...16).map { rand(10).to_s }.join
这最终会连接我们在随机数生成后获得的每个字符串。
希望这有助于您更好地理解它。
答案 2 :(得分:0)
(0...16).map { ... }
只执行块(花括号中的东西)十六次,并将执行块的十六个结果存储在一个数组中。如果你打开IRB并输入(0...16).map { rand(10).to_s }
,你会看到你得到一个像这样的字符串数组:
["9", "5", "3", "6", "0", "9", "5", "0", "6", "5", "2", "5", "7", "5", "5", "3"]
您应该阅读map
和join
方法的文档,了解它们的工作原理: