随机分配实例变量



我不确定这是否能做到,但我想我会问的。

我现在有这个:

class Color
attr_accessor :is_blue, :is_green, :is_brown, :is_yellow, :is_orange
def initialize
  @is_blue = false
  @is_green = false
  @is_brown = false
  @is_yellow = false
  @is_orange = false
end
def random_starting_color
  starting_color = [is_blue, is_green, is_brown, is_yellow, :is_orange].sample
  starting_color = true
end
end

正如您所猜测的,random_starting_color不起作用。有人知道当我创建一个新的"颜色"对象时,如何重新分配新的颜色吗?

我想你想做的是这样的事情:

ivars = [:@is_blue, :@is_green, :@is_brown, :@is_yellow, :@is_orange]
instance_variable_set(ivars.sample, true)

您不应该将颜色存储在不同的变量中,而应该只存储在一个变量中。否则,如果红色、棕色和蓝色是真的,你需要处理应该发生的事情。如果你有一个真正的RGB模型,这只会很好,但你需要可计数的值,而不是布尔值。

class Color
  COLORS = [:blue, :green, :brown, :yellow, :orange]
  attr_reader :color
  def initialize(color = :random)
    @color = color
  end
  def color=(color)
    if color == :random
      @color = COLORS.sample
    else
      @color = color if COLORS.include?(color)
    end
  end
  COLORS.each do |color|
    def #{color}?
      @color == :#{color}
    end
  end
end
c = Color.new     
c.color           # => a random color out all possible COLORS
c.color = :blue
c.color           # => :blue
c.blue?           # => true
c.yellow?         # => false
c.color = :random
c.color           # => a random color out all possible COLORS

相关内容

  • 没有找到相关文章

最新更新