Ruby嵌套for循环遍历字符串字符触发NoMethodError如何解决
错误产生原因
- Ruby中的
for...in循环属于语法糖,底层会自动调用被遍历对象的each方法完成迭代逻辑 - String类型对象默认没有实现
each方法,直接对字符串执行for x in 字符串的操作时,就会触发对应的NoMethodError报错
修复方案
可以通过调用字符串的each_char方法获取字符迭代器实现遍历,有两种常用写法:
- 保留原有
for循环风格的修改版
groceries = ['turkey', 'cranberries', 'stuffing', 'pumkin pie', 'whip-cream'] for i in groceries do p i for x in i.each_char do p x end end
- 更符合Ruby社区编码习惯的
each迭代写法(可读性更高)
groceries = ['turkey', 'cranberries', 'stuffing', 'pumkin pie', 'whip-cream'] groceries.each do |item| p item item.each_char do |char| p char end end
如果你更习惯先转成数组再遍历,也可以把each_char替换为chars方法,两者效果一致,区别是chars会生成新的字符数组占用额外内存,each_char直接迭代原字符串性能更优。
内容的提问来源于stack exchange,提问作者Aaron Cloud
相关产品推荐
相关产品推荐

