Ruby中yield命令运行异常,请求排查自定义my_map方法语法错误
Ruby中yield结合<<使用时的语法错误解决方法
你遇到的语法错误是因为yield e的写法在当前代码上下文里产生了语法歧义,Ruby解析器没法正确识别yield的参数边界。
错误原因
在acc << yield e这行里,Ruby的语法解析器会优先处理<<操作符,导致它把yield和e的关系搞混,误以为e是一个独立的局部变量或方法调用,从而抛出语法错误。
解决方法
给yield的参数加上括号,明确传递关系,把yield e改成yield(e)即可:
class Array def my_each return to_enum(:my_each) unless block_given? i = 0 while i < length yield(self[i]) i += 1 end self end def my_map return to_enum(:my_map) unless block_given? acc = [] my_each { |e| acc << yield(e) } # 这里把yield e改成yield(e) acc end end
验证效果
测试一下这个实现:
arr = [1,2,3] puts arr.my_map { |x| x * 2 }.inspect # 输出 [2,4,6]
这样就能正常运行,不会再出现语法错误了。
内容的提问来源于stack exchange,提问作者Retufom
相关产品推荐
相关产品推荐

