2014-01-09 20 views
1

我想我明白如何try的作品,但我得到一個未定義的方法錯誤:如何安全地檢索可能不存在的Ruby方法的值?

unknown_object.try(:some_method).try(:get_value) 

我在documentation for try,它只能從一個未定義的方法錯誤救如果對象是無發現。就我而言,我知道我的對象不是零,但我不確定它是否有我需要的方法。

如何安全地檢索(和鏈)方法在一起,以便我沒有得到未定義的方法錯誤?

+1

其軌道的方法作出迴應。我想你應該將其標記爲* Ruby on Rails的*也。 –

+0

哦,我認爲這是一個Ruby方法。哎呀。 – Andrew

+0

我以前就知道了...... –

回答

2

你正在尋找Rails 4開始實施的行爲:

Object#try will now return nil instead of raise a NoMethodError if the receiving object does not implement the method, but you can still get the old behavior by using the new Object#try! .

下面是新try鋼軌4源代碼:

def try(*a, &b) 
    if a.empty? && block_given? 
    yield self 
    else 
    public_send(*a, &b) if respond_to?(a.first) 
    end 
end 

唯一的區別是if respond_to?(a.first)

3

try只有當您將其稱爲無對象時才按預期工作。由於您的是一個有效的對象,我想你需要的是

if unknown_object.respond_to?(:some_method) 
    unknown_object.some_method.get_value 
end 
+0

這個答案沒有什麼錯,實際上它更一般地說是正確的。但對於Rails 4人來說,斯蒂芬已經死了 –

相關問題