我不确定如何在没有罗嗦和混淆的情况下提出这个问题。我想将变量存储在另一个变量中,并使这些变量特定于其home变量(基本上创建一个目录)。说我有三个角色,Max,Sam和Greg。我想存储每个角色有多少款待。
所以:
Max = [3 cookies, 4 donuts, 1 cakes]
Sam = [1 cookies, 5 donuts, 0 cakes]
Greg =[2 cookies, 4 donuts, 5 cakes]
然后,我想给一个角色提供或带走某些款待,或者询问他们有多少款待。我该怎么做?
我希望Max的饼干独立于Sam的饼干。但是,我仍然希望能够编写一个可以增加每个人cookie的通用方法。
def givecookies
@cookies=(@cookies+1)
但是我希望能够调用Max有多少个cookie。那么,有没有办法可以将变量存储在另一个变量中,然后我该如何调用它?比如,而不是放置cookies,我可以做一些像put(Max / cookies)的东西吗?
我很抱歉问题的尴尬。我只编写了几个星期的编程,而我仍然在努力学习基础知识。可能有一种方法,但我不知道该寻找什么。
答案 0 :(得分:2)
你使用类似哈希的结构,比如Hash
本身,Struct
或基于Hashie
的类。我更喜欢使用Hashie
gem和Hashie::Mash
类,如下所示:
@h = Hashie::Mash.new
# ...
@h.Max = Hashie::Mash.new
@h.Max.cookies = 3
@h.Max.donuts = 4
@h.Max.cakes = 1
@h
# => #<Hashie::Mash Max=#<Hashie::Mash cakes=1 cookies=3 donuts=4>>
def givecookies
@h.each {|_,y| y.cookies += 1}
end
或内置Struct
:
s = Struct.new( :cookies, :donuts, :cakes )
@s = { :Max => s.new( 3, 4, 1 ),
:Sam => s.new( 1, 5, 0 ),
:Greg => s.new( 2, 4, 5 ) }
def givecookies
@s.each {|_,y| y.cookies += 1}
end
答案 1 :(得分:1)
class Person
attr_accessor :name, :cookies
def initialize name, cookies = 0
@name = name
@cookies = cookies
end
end
p_max = Person.new 'Max', 3
puts "Max has #{p_max.cookies} cookies"
# ⇒ Max has 3 cookies
p_max.cookies += 2
puts "Max has #{p_max.cookies} cookies"
# ⇒ Max has 5 cookies
希望它有所帮助。