0

我有一个像这样的哈希:

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

后来我做h[:b]

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

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

4

2 回答 2

3

您可以将 lambdas 用于哈希值,并在需要实际值时调用 lambda,例如:

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

h[:b].call
于 2013-02-11T16:19:16.870 回答
2
h = {}
h.default_proc = proc do |hash, key|
  key == :b ? "/user/#{@user.id}" : nil
end
h[:a] #=> nil
h[:b] #=> "/user/<id>"
于 2013-02-11T16:23:14.040 回答