You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:46:00