2012-01-04 140 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更安全。

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