Ruby自定义each方法返回nil问题咨询(零基础学习者求助)
解决Ruby自定义each方法返回nil的问题
嘿,作为编程新手遇到这个问题很正常,咱们一步步来拆解:
问题根源
你写的custom_each方法最后没有显式返回值,而Ruby中方法默认会返回最后一行代码的执行结果。你的方法最后一行是while循环,循环执行完后没有返回任何内容,所以方法默认返回nil。
而Ruby内置的each方法设计是:遍历数组执行传入的块,但最终返回调用它的原数组,这样能支持链式操作(比如ages.each { ... }.sort)。
修改方案
只需要在方法最后加上返回原数组的代码就行,比如:
def custom_each(array) index = 0 while index < array.length yield array[index] index += 1 end array # 显式返回原数组,和内置each行为一致 end ages = [12, 45, 67, 89] p custom_each(ages) { |num| num * 2 } # 现在会输出原数组 [12, 45, 67, 89]
额外补充:each和map的区别
你正在学习map方法,这里刚好可以区分下:
each的作用是遍历元素执行块代码,它不关心块的返回值,最终返回原数组;map的作用是收集块的返回值,生成新数组。如果想得到你块里num * 2的结果,应该实现custom_map:
def custom_map(array) result = [] index = 0 while index < array.length result << yield(array[index]) # 收集块的返回值 index += 1 end result # 返回新数组 end p custom_map(ages) { |num| num * 2 } # 输出 [24, 90, 134, 178]
内容的提问来源于stack exchange,提问作者Ayo D Adesanya
相关产品推荐
相关产品推荐

