2011-04-04 116 views
1

我沒有看到其他人在ruby中使用的eval,所以我認爲這可以在沒有它的情況下完成。但我不知道如何。有沒有辦法做到這一點,而無需評估?

(1..9).each { |n| 
    eval "user_#{n} = prefix << '_' << user_#{n} if user_#{n}" 
} 
+2

你能解釋一下你想完成什麼嗎?以這種方式創建9個變量似乎不是個好主意。也許陣列或散列可以用於相同的目的? – bowsersenior 2011-04-04 18:09:20

+0

你在Rails中使用它嗎? – fl00r 2011-04-04 18:13:39

+0

我沒有創建變量,它基本上是一個格式化函數,我在變量的前面加上user_id。我這樣做是爲了確保在執行批量插入時它們是唯一的。 – 2011-04-04 18:15:54

回答

6

使用哈希,而不是局部變量的重寫代碼,你可以溝EVAL:

(1..9).each { |n| 
    user[n] = prefix << '_' << user[n] if user[n] 
} 

BTW,我想你不想使用<<上面,因爲它會改變你的prefix爲好。

+0

我同意使用適當的數據結構,但如果你正在做這樣的連續數字,我會強烈建議一個數組而不是散列。 – Chuck 2011-04-04 18:34:24

+2

看來,一些元素沒有被設置,這就是爲什麼我建議散列(作爲稀疏數組)。 – 2011-04-04 18:35:50

-1

您可以使用ruby的define_method動態地定義一個方法。

您可以將eval的報表替換爲class_eval中的define_method

但是,這取決於情況。用動態方法替換eval可能是矯枉過正的。

您需要爲您的問題提供更多上下文以獲得更好的答案。

2

如果要實現這個作爲一個數組,你可以嘗試

users.map! do |user| 
    user ? "#{prefix}_#{user}" : nil 
end 

假設users已定義。

相關問題