syntax/assignments_as_values.rb

tests/_examples/syntax/assignments_as_values.rb in the metorex repository.

def show(*values, region: nil, &block)
  [values, region, block&.call]
end

def hand_over(rates)
  yield(_ = rates)
end

rate = 4
found = case
        when doubled = rate * 2
          doubled
        end
p(found)
p(case rate
  when limit = 4 then limit + 1
  end)

decl = case entry = [1, 2]
       when Array then entry.size
       end
p([decl, entry])

version = "1.2"
picked = if version and parsed = version.to_f
  parsed
end
p(picked)

p(show(1, region: _ = :west))
reload = -> { :reloaded }
p(show(&_ = reload))
p(show(*_ = [5, 6]))
p(hand_over([7]) { |held| held })

out, err = _ = ["shipped", "none"]
p([out, err])
cache = {}
first, second = cache[:rates] ||= [8, 9]
p([first, second, cache])

Output:

8
5
[2, [1, 2]]
1.2
[[1], :west, nil]
[[], nil, :reloaded]
[[5, 6], nil, nil]
[7]
["shipped", "none"]
[8, 9, {rates: [8, 9]}]