我不确定是否可以这样做,但我想我会问。
我目前有这个:
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
无法正常工作。有没有人知道在创建新的Color对象时如何重新分配新颜色?
答案 0 :(得分:4)
我认为你的意思是这样的:
ivars = [:@is_blue, :@is_green, :@is_brown, :@is_yellow, :@is_orange]
instance_variable_set(ivars.sample, true)
答案 1 :(得分:3)
您不应将颜色存储在不同的变量中,而应仅存储在一个变量中。否则你需要处理如果红色,棕色和蓝色为真的情况会发生什么。只有你有一个真正的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