我有这个数据的哈希:
{"ENABLED"=>
[#<Details:0x00007f910e946848
@context="ELP",
@instance="a1",
@side="blue",
@status="ENABLED",
@vm="ome-vm58",
@vmaddr="ajp://10.133.248.4:8009">,
... snip ...
#<Details:0x00007f910e944070
@context="learnItLive",
@instance="b2",
@side="green",
@status="ENABLED",
@vm="ome-vm61",
@vmaddr="ajp://10.133.248.7:8159">]}
哈希称为status_hash
。我想确定密钥是否已启用。其他可能的键值是DISABLED,STOPPED和WAITING。
这些行:
puts "Status key: " + status_hash.keys.to_s
puts "1 - Cluster has Disabled, Stopped, or Waiting contexts" if status_hash.keys.grep(/^[DSW]/)
生成输出,即使键是“ENABLED”
Status key: ["ENABLED"]
1 - Cluster has Disabled, Stopped, or Waiting contexts
我不明白为什么当密钥中的第一个字符是E
而不是DSW
时正则表达式匹配。
答案 0 :(得分:2)
Enumerable#grep总是返回一个数组,即使你的结果产生[]
,这在红宝石中也是真实的。
示例:
p 'hello world' if [].grep(/hi/).empty?
"hello world"
=> "hello world"
p 'hello world' if ![].grep(/hi/).empty?
=> nil
答案 1 :(得分:1)
尝试在.any?
结果
grep
puts "1 - Cluster has Disabled, Stopped, or Waiting contexts" if status_hash.keys.grep(/^[DSW]/).any?
为什么问题发生的原因是grep
返回空数组[]
,这被认为是真实的。所以我们需要应用any?
,如果数组中有任何元素,则返回true。