2014-03-26 105 views
7

我正在使用Net :: LDAP的搜索,返回的条目是这样的。如何检查密钥是否存在于Ruby哈希中?

#<Net::LDAP::Entry:0x7f47a6491c00 
@myhash= 
    {:loginshell=>["/bin/bash"], 
    :cn=>["M... R..."], 
    :homedirectory=>["/mnt/home/m..."], 
    :uid=>["m..."], 
    :userpassword=>["{CRYPT}$1$3zR/C...$R1"], 
    ... 
}> 

我试图做到以下,但失败。

(1)

e = entry.to_hash 
e.has_key? "uid" 

(2)

entry.has_key? "uid" 

第一误差说 “to_hash” 未定义,第二个 “对象的has_key” 未定义。然后,我真的不知道该怎么做,基本上我想找出是否存在“uid”,如果有,就获得其相应的值。

非常感谢你的小费。

BTW,只响应“entry.uid”,但如果搜索键被以字符串形式提供,该怎么做?例如,

def get_value(key) 
    if entry has key 
    return key's value 
    end 
end 

回答

16

:uidSymbol。那不是String

试试这个:

e.has_key? :uid 
+0

如果您拥有的只是一个字符串,您也可以''uid“.to_sym' –

+0

”has_key“未定义,但”to_sym“有帮助。谢谢。 – user180574

+2

'has_key?' - 知道问号 - 是'Hash'类的任何实例的一种方法。除非你使用与Hash实例不同的东西,否则它不能被定义。 – scaryguy

2

关键的 “流体” 不存在。尝试

e = Entry.new.myhash 
e.has_key?(:uid) 

这应该返回true。如果这给你一个错误,问题可能在于你的课堂。确保myhash在initialize方法中定义,并且使用getter方法(或attr_reader)能够访问该变量。您可以在初始化方法之前使用权

attr_reader :myhash 

相关问题