You could technically use a parenthesis in the second example and let the key value be nil if the condition is not met.
[1] pry(main)> condition = true => true [2] pry(main)> data = { [2] pry(main)* user: "alice", [2] pry(main)* comment: ("something" if condition), [2] pry(main)* metadata: ("something else" unless condition), [2] pry(main)* } => {:user=>"alice", :comment=>"something", :metadata=>nil} [3] pry(main)> _.compact => {:user=>"alice", :comment=>"something"}
Another strategy is to use tap
[1] pry(main)> condition = true => true [2] pry(main)> data = { user: "alice" } => {:user=>"alice"} [3] pry(main)> data.tap do |d| [3] pry(main)* d[:comment] = "something" if condition [3] pry(main)* d[:metadata] = "something else" unless condition [3] pry(main)* end => {:user=>"alice", :comment=>"something"}
It's not a perfect solution but it allows you to build the dictionary in blocks. You can also attach multiple "taps".
Hmmmmmm interesting. I do want to avoid having a nil value. The tap is an interesting solution but I think it seems too verbose for creating a single use hash.
tap
nil + compact then ?
Tap is great to create a pipe of operations, a little overkill with your use case yeah
nil + compact also seems overkill :/ Feels like an extra operation when I can skip it with a single line if.
if
you're right, the first solution is the clearest
The alternatives are "tricks" :D
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
You could technically use a parenthesis in the second example and let the key value be nil if the condition is not met.
Another strategy is to use tap
It's not a perfect solution but it allows you to build the dictionary in blocks. You can also attach multiple "taps".
Hmmmmmm interesting. I do want to avoid having a nil value. The
tap
is an interesting solution but I think it seems too verbose for creating a single use hash.nil + compact then ?
Tap is great to create a pipe of operations, a little overkill with your use case yeah
nil + compact also seems overkill :/ Feels like an extra operation when I can skip it with a single line
if
.you're right, the first solution is the clearest
The alternatives are "tricks" :D