2013-01-18 44 views
0

我有一個類Deal < ActiveResource具有從資源綁定的屬性選項。 我確認選項在rails控制檯中返回一個數組。 但是,定義?(選項)返回nil。 雖然我注意到已定義?(:options)返回true,但我仍不明白爲什麼在前面的示例中返回nil。Ruby定義?檢查定義的屬性時返回nil?

+2

你能展示一個更完整的代碼示例嗎? – jtbandes

+3

要明確的是,'defined?(:options)'將總是返回一個真值,因爲':options'是一個表達式,產生一個Symbol類的實例,因此的確定義。這與你的班級沒有任何關係。 – Brandan

+0

布蘭登是正確的。無論符號是什麼,定義?(:任何)總是返回true。 – user1991452

回答

0

據我所知,ActiveResource使用method_missing方法做它的小魔術。所以實際上你不應該期待定義方法options。您可以查看implementation以瞭解其工作原理。

0

我懷疑defined?(options)正在調用選項方法並將結果傳遞給defined?defined?(:options)是你可能想要的。提供代碼片段可能有助於更準確地回答。

+0

澄清,定義?(:選項)總是返回true,不管選項是什麼。所以問題變成了如何定義?(選項)返回nil self.options確實返回一個非空數組。 – user1991452

+0

正如Ivaylo所建議的,self.options可能是使用method_missing實現的,而不是實際的方法。是否respond_to?(:options)返回true?如果不是,那麼它使用method_missing實現。如果它返回true,它可能仍然意味着respond_to?已被重寫爲與method_missing一致 – aagdbl