如何创建在条件表达式中计算结果为 false 的 Ruby 变量
我想让我的变量(代理对象)在条件句子中使用时评估为 false。我知道我可以使用 .nil?甚至 var == nil 但我认为这还不够好。我想做的是:
if myproxy # not only myprroxy.nil? or myproxy == nil, but just that
# myproxy's backend object is not nil
else
# myproxy's backend object is nil
end
有什么想法吗?
I want to make my variable (a proxy object) evaluate to false when used in conditional sentences. I know I can use .nil? and even var == nil but I think that's not good enough. What I am trying go do is to:
if myproxy # not only myprroxy.nil? or myproxy == nil, but just that
# myproxy's backend object is not nil
else
# myproxy's backend object is nil
end
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 Ruby 的布尔上下文中,唯一两个计算结果为 false-ish 值的对象是
nil
(NilClass
的单例实例)和false
,FalseClass
的单例实例。 每个其他对象都会计算出一个真实值。如果您希望采用
else
分支,则myproxy
必须 计算结果为nil
或false
。如果您想要实际控制的布尔型内容,您可以尝试使用
case
表达式并覆盖 case 包含运算符MyProxy#===
。The only two objects that evaluate to a false-ish value in a boolean context in Ruby are
nil
, the singleton instance ofNilClass
andfalse
, the singleton instance ofFalseClass
. Every other object evaluates to a tru-ish value.If you want that
else
branch to be taken, thenmyproxy
must evaluate to eithernil
orfalse
.If you want something boolean-ish that you have actual control over, you could try a
case
expression and override the case subsumption operatorMyProxy#===
.