In Ruby, you can use Array#join to simple join together multiple strings with an optional delimiter.
[ "a", "b", "c" ].join #=> "abc"
[ "a", "b", "c" ].join("-") #=> "a-b-c"
I’m wondering if there is nice syntactic sugar to do something similar with a bunch of boolean expressions. For example, I need to && a bunch of expressions together. However, which expressions will be used is determined by user input. So instead of doing a bunch of
cumulative_value &&= expression[:a] if user[:input][:a]
I want to collect all the expressions first based on the input, then && them all together in one fell swoop. Something like:
be1 = x > y
be2 = Proc.new {|string, regex| string =~ regex}
be3 = z < 5 && my_object.is_valid?
[be1,be2.call("abc",/*bc/),be3].eval_join(&&)
Is there any such device in Ruby by default? I just want some syntatic sugar to make the code cleaner if possible.
Try
Array#all?. Ifarris an Array of booleans, this works by itself:will return
trueif every element inarris true, orfalseotherwise.You can use
Array#any?in the same manner for joining the array on||, that is, it returnstrueif any element in the array is true andfalseotherwise.This will also work if
arris an array ofProcs, as long as you make sure to pass the correct variables toProc#callin the block (or use class, instance, or global variables).