我沒有看到其他人在ruby中使用的eval,所以我認爲這可以在沒有它的情況下完成。但我不知道如何。有沒有辦法做到這一點,而無需評估?
(1..9).each { |n|
eval "user_#{n} = prefix << '_' << user_#{n} if user_#{n}"
}
我沒有看到其他人在ruby中使用的eval,所以我認爲這可以在沒有它的情況下完成。但我不知道如何。有沒有辦法做到這一點,而無需評估?
(1..9).each { |n|
eval "user_#{n} = prefix << '_' << user_#{n} if user_#{n}"
}
使用哈希,而不是局部變量的重寫代碼,你可以溝EVAL:
(1..9).each { |n|
user[n] = prefix << '_' << user[n] if user[n]
}
BTW,我想你不想使用<<
上面,因爲它會改變你的prefix
爲好。
我同意使用適當的數據結構,但如果你正在做這樣的連續數字,我會強烈建議一個數組而不是散列。 – Chuck 2011-04-04 18:34:24
看來,一些元素沒有被設置,這就是爲什麼我建議散列(作爲稀疏數組)。 – 2011-04-04 18:35:50
您可以使用ruby的define_method動態地定義一個方法。
您可以將eval
的報表替換爲class_eval
中的define_method
。
但是,這取決於情況。用動態方法替換eval
可能是矯枉過正的。
您需要爲您的問題提供更多上下文以獲得更好的答案。
如果要實現這個作爲一個數組,你可以嘗試
users.map! do |user|
user ? "#{prefix}_#{user}" : nil
end
假設users
已定義。
你能解釋一下你想完成什麼嗎?以這種方式創建9個變量似乎不是個好主意。也許陣列或散列可以用於相同的目的? – bowsersenior 2011-04-04 18:09:20
你在Rails中使用它嗎? – fl00r 2011-04-04 18:13:39
我沒有創建變量,它基本上是一個格式化函數,我在變量的前面加上user_id。我這樣做是爲了確保在執行批量插入時它們是唯一的。 – 2011-04-04 18:15:54