2012-01-04 142 views
2

我想知道是否有一个优雅的方式来创建变量使用循环在红宝石?用循环创建多个变量?

说我想要把这个在某种循环

def workhours 
    @monday = blah 
    @tuesday = brah 
    @wednesday = bro 
    @thursday = blap 
    @friday = blagh 
end 

的我希望能够做

def workhour_ideally 
    days = [ "monday", "tuesday", "wednesday", "thursday", "friday" ] 

    days.each do |smack| 
    @"smack" = whatever 
    end 
end 

这可能与红宝石?

+1

相关问题:http://stackoverflow.com/questions/1778638/idiomatic-object-creation-in-ruby – 2012-01-04 22:40:00

回答

5

是的,它可能与Rails。不,你不应该这样做。如果我不得不猜测,我会说这是一种PHPism。

更棒的是使用哈希:

@days = { 
    :monday => blah, 
    :tuesday => brah, 
    # ... 
    :friday => blagh 
} 

然后你可以根据需要对这些迭代。参考其中之一只是稍微更多的输入:@days[:monday]而不是@monday

使用正确的数据结构允许您操作它,遍历它,并提供各种机会来彻底测试它。

+1

谢谢。看起来我有一些代码需要清理。 – 2012-01-04 21:07:32

2

是的,这是可能的。我认为这叫做instance_variable_set,这比使用邪恶的eval更安全。

但是如果可行的话使用散列。