Ruby是否可以为变量创建目录?

时间:2014-01-27 07:24:35

标签: ruby variables directory

我不确定如何在没有罗嗦和混淆的情况下提出这个问题。我想将变量存储在另一个变量中,并使这些变量特定于其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)的东西吗?

我很抱歉问题的尴尬。我只编写了几个星期的编程,而我仍然在努力学习基础知识。可能有一种方法,但我不知道该寻找什么。

2 个答案:

答案 0 :(得分:2)

你使用类似哈希的结构,比如Hash本身,Struct或基于Hashie的类。我更喜欢使用Hashie gemHashie::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

希望它有所帮助。