如何检查方法是否存在并在Ruby中返回某些值?

时间:2014-04-29 07:07:59

标签: ruby-on-rails ruby

我正在使用谷歌驱动器api,我从谷歌驱动器API获取文件对象。 现在该文件可能/可能没有downloadLink和webContentLink,具体取决于用户验证文件。 现在我有这些方法

download_links[index][1] = i.webContentLink if i.responds_to? :webContentLink

现在它表示没有为i定义responds_to。 现在我是一个远程对象,所以我不能改变它的实现并添加method_missing或responds_to方法。 so 如何检查i.webContentLink是否是该第i个对象中的有效方法。

1 个答案:

答案 0 :(得分:4)

这里有两件事。

首先,#responds_to?确实不存在,任何地方:)您要使用的正确方法名称为#respond_to?

其次,这不是一个ruby方法,因为你要求它,但我提到它,因为你在rails标签上发布ruby问题。来自rails的ActiveSupport实现了#try方法来实现这一目标。

如果存在,则返回方法的结果,或者返回nil:

download_links[index][1] = i.try( :webContentLink )

请务必不要滥用它,因为它会很快导致难以理解的代码(在某些时候,您需要了解NullObjects)。