2015-09-14 88 views
-1

什麼我目前做的是檢查哈希值是零檢查特定屬性之前

"Hello" if options && options[:greet] 

我想要做的是切斷這條線下來。如果options爲零,則options[:greet]顯然也會如此。 Ruby/Rails是否提供了一種提供這種「散列檢查」功能的方法?或者也許有一種更簡潔的寫作方式?

+0

可能的重複[如何避免NoMethodError嵌套散列中的缺少元素,沒有重複零檢查?](http://stackoverflow.com/questions/4371716/how-to-avoid-nomethoderror-for-missing-elements -in-nested-hashes-without-repeat) –

+0

我不同意重複 - 多級嵌套哈希不是這個問題的關鍵。 –

回答

5

我會認爲那條線是完全正確的。

也許確保總是設置options也許是有意義的。如果options形式傳入的參數的方法,你可能需要設置一個默認:

def method_name(options = {}) 

或者你可能要初始化options一個空的哈希如果nil你開始使用它們之前:

options ||= {} 

的Rails還提供try方法,當你調用nil方法不失敗:

options.try([], :greet) 
+0

謝謝,我正在使用'options = nil'進行初始化,並沒有真正考慮將它設置爲空的哈希值的可能性。有趣的使用'try'也:) – Dan

4

還有一個捷徑,我傾向於更頻繁地使用它,當我無法控制options變量時(即,它可以是零或哈希):

options.to_h[:greet] # just convert it to a hash before key access 

注意,它只能starting from Ruby 2.0