什麼我目前做的是檢查哈希值是零檢查特定屬性之前
"Hello" if options && options[:greet]
我想要做的是切斷這條線下來。如果options
爲零,則options[:greet]
顯然也會如此。 Ruby/Rails是否提供了一種提供這種「散列檢查」功能的方法?或者也許有一種更簡潔的寫作方式?
什麼我目前做的是檢查哈希值是零檢查特定屬性之前
"Hello" if options && options[:greet]
我想要做的是切斷這條線下來。如果options
爲零,則options[:greet]
顯然也會如此。 Ruby/Rails是否提供了一種提供這種「散列檢查」功能的方法?或者也許有一種更簡潔的寫作方式?
我會認爲那條線是完全正確的。
也許確保總是設置options
也許是有意義的。如果options
形式傳入的參數的方法,你可能需要設置一個默認:
def method_name(options = {})
或者你可能要初始化options
一個空的哈希如果nil
你開始使用它們之前:
options ||= {}
的Rails還提供try
方法,當你調用nil
方法不失敗:
options.try([], :greet)
謝謝,我正在使用'options = nil'進行初始化,並沒有真正考慮將它設置爲空的哈希值的可能性。有趣的使用'try'也:) – Dan
還有一個捷徑,我傾向於更頻繁地使用它,當我無法控制options
變量時(即,它可以是零或哈希):
options.to_h[:greet] # just convert it to a hash before key access
注意,它只能starting from Ruby 2.0。
可能的重複[如何避免NoMethodError嵌套散列中的缺少元素,沒有重複零檢查?](http://stackoverflow.com/questions/4371716/how-to-avoid-nomethoderror-for-missing-elements -in-nested-hashes-without-repeat) –
我不同意重複 - 多級嵌套哈希不是這個問題的關鍵。 –