Ruby 有没有办法初始化散列';懒惰的价值观?

Ruby 有没有办法初始化散列';懒惰的价值观?,ruby,hash,lazy-evaluation,Ruby,Hash,Lazy Evaluation,我有一个类似于: h = { a: '/users/sign_up', b: "/user/#{@user.id]}" } 后来我做了h[:b] 哈希值在哈希本身初始化时初始化。但是我希望每次调用h[:b]时都能调用@user.id 用Ruby的散列似乎不可能做到这一点。但是有一些解决方法吗?您可以使用lambda作为散列的值,并在需要实际值时调用lambda,例如: h = { a: ->{'/users/sign_up'}, b: ->{"/user/#{@us

我有一个类似于:

h = {
  a: '/users/sign_up',
  b: "/user/#{@user.id]}"
}
后来我做了
h[:b]

哈希值在哈希本身初始化时初始化。但是我希望每次调用
h[:b]
时都能调用
@user.id


用Ruby的散列似乎不可能做到这一点。但是有一些解决方法吗?

您可以使用lambda作为散列的值,并在需要实际值时调用lambda,例如:

h = {
  a: ->{'/users/sign_up'},
  b: ->{"/user/#{@user.id}"}
}

h[:b].call

您可以使用lambda作为散列值,并在需要实际值时调用lambda,例如:

h = {
  a: ->{'/users/sign_up'},
  b: ->{"/user/#{@user.id}"}
}

h[:b].call
h={}
h、 默认值_proc=proc do |散列,键|
键==:b?“/user/#{@user.id}”:无
结束
h[:a]#=>零
h[:b]#=>“/user/”
h={}
h、 默认值_proc=proc do |散列,键|
键==:b?“/user/#{@user.id}”:无
结束
h[:a]#=>零
h[:b]#=>“/user/”