我认为这只是常识和Ruby惯例,但我有这个方法:
def is_subscribed?(feed_url)
Subscription.find_by_user_id_and_feed_id(self[ :id ], Feed.find_by_feed_url(feed_url))
end
Run Code Online (Sandbox Code Playgroud)
我得到的唯一困惑是,这不会像我最初预期的那样返回布尔值,方法名称的末尾加上问号.我的印象是,在将对象评估为条件时,true
如果不是则返回nil
.
显然我在这里忽略了这一点,并没有像我想的那样评估它.
所以,我的问题是,最好只做一个if (condition) true else false
?或者有更优雅的方法吗?
Ben*_*ate 39
一个以?结尾的方法 应返回一个可以评估为true或false的值.如果要确保布尔返回,可以通过向查找器添加双重爆炸来实现.
def is_subscribed?(feed_url)
!!Subscription.find_by_user_id_and_feed_id(self[ :id ], Feed.find_by_feed_url(feed_url))
end
Run Code Online (Sandbox Code Playgroud)
And*_*all 17
将a添加?
到方法名称的末尾不会以任何方式更改方法的返回值,而只是表示它是谓词方法.也就是说,该方法的返回值应该被视为布尔值,但不一定是严格的布尔值(即true
或false
).
许多其他答案表明它应该返回一个真实或虚假的值.这是多余的,因为一切都可以是真或假,并且因为Ruby中的所有方法都返回一些东西(除非它们引发异常),返回值总是真或假.
想想在其他语言中?
添加一个更好的替代方案is_
; 例如,我要么subscribed?
或is_subscribed
.
归档时间: |
|
查看次数: |
23151 次 |
最近记录: |