ruby - 如何动态更改变量名称?

标签 ruby local-variables

我有以下循环:

(1..1000).each do |i|
  user1 = User.create(:name => "Bob#{i}")
  ...
end

如何让变量名user1使用 i 动态变化得到:

user1 == Bob1
user2 == Bob2
user3 == Bob3

最佳答案

你不能,但你可以使用哈希来获得类似的结果:

(1..1000).each_with_object({}) do |i, users|
  users["user#{i}"] = User.create(:name => "Bob#{i}")
end

如果需要访问 block 外的哈希值,只需将其分配给变量即可:

users = (1..1000).each_with_object({}) { |i, users| users["user#{i}"] = User.create(:name => "Bob#{i}") }

并访问特定用户(例如user1),如下所示:

users["user1"]

或者您可以仅使用 i 作为 key :

users = (1..1000).each_with_object({}) { |i, users| users[i] = User.create(:name => "Bob#{i}") }

并访问特定用户(例如user1),如下所示:

users[1]

关于ruby - 如何动态更改变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44771684/

相关文章:

ruby-on-rails - 尝试循环遍历哈希中的项目并仅返回某些项目

ruby - 为什么 `do` ... `end` 和 `end` 样式 block 都对 `while` 和 `for` 循环有效?

java - 为什么我无法在 JAVA 项目中实现 Streams 功能?

JavaScript:如何确定变量的范围?

ruby-on-rails - 如果 checkin rails 表单标签

mysql - Ruby + mysql2 查询因变量而失败

java - 使用局部变量来保存全局变量的目的是什么?

javascript - HTML 和 Javascript - 使用循环创建按钮不会 "individualize".onclick = {}

递归函数和全局变量与局部变量

ruby - 将实例变量初始化为数组 - Ruby