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