ist*_*sci 14 ruby syntactic-sugar boolean-expression
在Ruby中,您可以使用Array#join将多个字符串简单地连接在一起,并使用可选的分隔符.
[ "a", "b", "c" ].join        #=> "abc"
[ "a", "b", "c" ].join("-")   #=> "a-b-c"
我想知道是否有一个很好的语法糖与一堆布尔表达式做类似的事情.例如,我需要&&一堆表达式.但是,将使用哪些表达式由用户输入确定.所以不要做一堆
cumulative_value &&= expression[:a] if user[:input][:a]
我想先根据输入收集所有表达式,然后将&&它们一起全部收集起来.就像是:
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(&&)
默认情况下Ruby中是否有这样的设备?如果可能的话,我只想要一些合成糖来使代码更清洁.
Rei*_*ard 27
试试Array#all?.如果arr是一个布尔数组,这本身是有效的:
arr.all?
true如果每个元素都arr为真,则返回false.
您可以Array#any?以相同的方式使用连接数组||,也就是说,true如果数组中的任何元素为true ,则返回,否则返回false.
这也将工作,如果arr是一个数组Procs,只要你确保正确的变量传递给Proc#call在该块(或使用类,实例或全局变量).
Yos*_*ssi 17
你可以使用#all?,#any?并#none?实现这一目标:
[true, false].any?
=> true
[true, false].all?
=> false
并且不要忘记,除了nul和false评估之外的所有价值观true.
['', [], {}].all?
=> true