我想我明白如何try
的作品,但我得到一個未定義的方法錯誤:如何安全地檢索可能不存在的Ruby方法的值?
unknown_object.try(:some_method).try(:get_value)
我在documentation for try
,它只能從一個未定義的方法錯誤救如果對象是無發現。就我而言,我知道我的對象不是零,但我不確定它是否有我需要的方法。
如何安全地檢索(和鏈)方法在一起,以便我沒有得到未定義的方法錯誤?
我想我明白如何try
的作品,但我得到一個未定義的方法錯誤:如何安全地檢索可能不存在的Ruby方法的值?
unknown_object.try(:some_method).try(:get_value)
我在documentation for try
,它只能從一個未定義的方法錯誤救如果對象是無發現。就我而言,我知道我的對象不是零,但我不確定它是否有我需要的方法。
如何安全地檢索(和鏈)方法在一起,以便我沒有得到未定義的方法錯誤?
你正在尋找Rails 4開始實施的行爲:
Object#try
will now returnnil
instead of raise aNoMethodError
if the receiving object does not implement the method, but you can still get the old behavior by using the newObject#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)
。
try
只有當您將其稱爲無對象時才按預期工作。由於您的是一個有效的對象,我想你需要的是
if unknown_object.respond_to?(:some_method)
unknown_object.some_method.get_value
end
這個答案沒有什麼錯,實際上它更一般地說是正確的。但對於Rails 4人來說,斯蒂芬已經死了 –
其軌道的方法作出迴應。我想你應該將其標記爲* Ruby on Rails的*也。 –
哦,我認爲這是一個Ruby方法。哎呀。 – Andrew
我以前就知道了...... –