Crystal中使用each_char.map如何获取与Ruby一致的数组输出?
原因说明
Crystal 和 Ruby 在迭代器的设计上存在差异:
- Ruby 中
each_char调用后返回的是立即执行的枚举对象,调用map会直接遍历所有元素生成结果数组 - Crystal 中
each_char默认返回惰性迭代器,对惰性迭代器调用map仍然会返回迭代器实例,不会立即执行计算,也就不会直接生成数组
解决方法
只需要在map之后调用to_a方法消费迭代器,将计算结果转为数组即可,修改后的代码如下:
word = "NUMBER" b = word.each_char.map { 'x' }.to_a p b
运行后输出结果为 ["x", "x", "x", "x", "x", "x"],和 Ruby 运行结果完全一致。
如果你的需求只是生成和字符串长度一致的相同元素数组,还可以用更高效的写法:
word = "NUMBER" b = Array.new(word.size, 'x') p b
内容的提问来源于stack exchange,提问作者Omn
相关产品推荐
相关产品推荐

