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

Ruby中map!函数在Mastermind项目中表现异常求助

Mastermind猜色项目map!函数返回nil问题排查

我正在开发基础版Mastermind猜色项目,包含随机选色和用户猜色功能。map!函数本应遍历数组并修改原数组元素:随机选色场景中它能将数字转为对应颜色的带色圆形;但处理用户输入的场景中,数组却返回[nil,nil,nil,nil]。以下是相关代码:

颜色映射模块

module Shapes
  CIRCLE = "●"
  COLORS = {
    1 => :red,
    2 => :green,
    3 => :magenta,
    4 => :blue,
    5 => :cyan,
    6 => :yellow,
    8 => :white,
    9 => :black
}
end

随机选色代码

def random_code
    arr = Array.new(4) {(rand(1..6).to_i)}
    puts arr
    arr.map! do |item|
      color = COLORS[item]
      CIRCLE.colorize(color)
    end
    puts arr
    return arr
end

用户输入处理代码

p_code.map! do |item|
        colors = COLORS[item.to_i]
        CIRCLE.colorize(colors)
        puts CIRCLE.colorize(colors)
end

问题原因与修复方案

问题出在用户输入处理的map!块中:Ruby的块会返回最后一行代码的执行结果。你在块的最后一行调用了puts方法,而puts的返回值始终是nil,因此map!会把数组的每个元素都替换成nil。

反观随机选色的代码,块的最后一行是CIRCLE.colorize(color),这个表达式返回带颜色的圆形字符串,所以能正确修改数组内容。

修复方法有两种:

  1. 把puts移出map!块,单独遍历输出:
p_code.map! do |item|
  color = COLORS[item.to_i]
  CIRCLE.colorize(color)
end
p_code.each { |circle| puts circle }
  1. 在块内先保存带颜色的圆形,输出后再返回该值:
p_code.map! do |item|
  color = COLORS[item.to_i]
  colored_circle = CIRCLE.colorize(color)
  puts colored_circle
  colored_circle
end

调整后,map!就能正确将数组元素替换为带颜色的圆形字符串,不再返回[nil,nil,nil,nil]。

内容的提问来源于stack exchange,提问作者Revanth Rockie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:01