我有一个像这样的哈希:
h = {
a: '/users/sign_up',
b: "/user/#{@user.id]}"
}
后来我做h[:b]
。
哈希值在哈希本身被初始化时被初始化。但是我希望@user.id
每次被调用时h[:b]
都被调用。
似乎不可能用 Ruby 的散列来做到这一点。但是有一些解决方法吗?
我有一个像这样的哈希:
h = {
a: '/users/sign_up',
b: "/user/#{@user.id]}"
}
后来我做h[:b]
。
哈希值在哈希本身被初始化时被初始化。但是我希望@user.id
每次被调用时h[:b]
都被调用。
似乎不可能用 Ruby 的散列来做到这一点。但是有一些解决方法吗?
您可以将 lambdas 用于哈希值,并在需要实际值时调用 lambda,例如:
h = {
a: ->{'/users/sign_up'},
b: ->{"/user/#{@user.id}"}
}
h[:b].call
h = {}
h.default_proc = proc do |hash, key|
key == :b ? "/user/#{@user.id}" : nil
end
h[:a] #=> nil
h[:b] #=> "/user/<id>"