我不确定这是否能做到,但我想我会问的。
我现在有这个:
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