我不再使用Ruby,而是通过制作MasterMind游戏来练习。我有一个名为Color
的课程,如下所示。
module Colors
LIST =
{
R: "Red",
B: "Blue",
G: "Green",
Y: "Yellow",
V: "Violet",
P: "Purple",
I: "Indigo",
A: "Ash",
O: "Orange"
}
class Colors
def initialize
end
def self.generate_colors(amount)
# LIST.to_a.sample(amount)
sample = []
list = LIST.to_a
amount.times{ sample << list[Random.rand(list.length-1)] }
sample
end
def self.get_color(key)
LIST[key]
end
def self.get_color_keys (colors)
keys_array = []
colors.each{|key, color| keys_array << key.to_s;}
return keys_array
end
def self.get_color_values(colors)
values_array = []
colors.each{|key, color| values_array << color}
values_array
end
end
end
我的导师说,LIST
常量可以很容易地放在Colors
类中,这样我只需调用一个方法,比如get_colors
,就可以返回颜色列表。
由于我是Ruby新手,我想知道正常的Ruby约定是什么,你认为哪种方法更好。
答案 0 :(得分:1)
由于您的课程主要使用class
方法,因此它似乎就像一个模块。您的代码可以简化为以下。除非class
具有某种状态(某些实例变量),否则不需要实例化它。
module Colors
COLORS = {
R: "Red",
B: "Blue",
G: "Green",
Y: "Yellow",
V: "Violet",
P: "Purple",
I: "Indigo",
A: "Ash",
O: "Orange"
}
def self.pick_colors(count)
sampled_keys = []
count.times { sampled_keys << COLORS.keys.sample }
sampled_keys
end
end
p c = Colors.pick_colors(2)
#=> [:R, :A]
p Colors::COLORS[c[0]]
#=> ["Red"]
p Colors::COLORS
#=> {:R=>"Red", :B=>"Blue", :G=>"Green", :Y=>"Yellow", :V=>"Violet", :P=>"Purple", :I=>"Ind
就常量的定义而言,它们最好在它们最合乎逻辑的属性中定义 - 它可以是Module
或Class
,具体取决于谁将这些常量引入到用户(程序员)