2014-03-26 132 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 

相關問題