ist*_*sci 14 ruby syntactic-sugar boolean-expression
在Ruby中,您可以使用Array#join将多个字符串简单地连接在一起,并使用可选的分隔符.
[ "a", "b", "c" ].join #=> "abc"
[ "a", "b", "c" ].join("-") #=> "a-b-c"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个很好的语法糖与一堆布尔表达式做类似的事情.例如,我需要&&
一堆表达式.但是,将使用哪些表达式由用户输入确定.所以不要做一堆
cumulative_value &&= expression[:a] if user[:input][:a]
Run Code Online (Sandbox Code Playgroud)
我想先根据输入收集所有表达式,然后将&&
它们一起全部收集起来.就像是:
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(&&)
Run Code Online (Sandbox Code Playgroud)
默认情况下Ruby中是否有这样的设备?如果可能的话,我只想要一些合成糖来使代码更清洁.
Rei*_*ard 27
试试Array#all?
.如果arr
是一个布尔数组,这本身是有效的:
arr.all?
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
并且不要忘记,除了nul
和false
评估之外的所有价值观true
.
['', [], {}].all?
=> true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6801 次 |
最近记录: |