如何创建一个实例可以被评估为 false 的类?
我想创建一个类 Nilly
来获取“伪 nil”对象,但我需要将其评估为布尔值 false
。
例如:
class Nilly; end
n = Nilly.new
puts n ? 'true' : 'false' #=> I want false here
我该怎么做?
PS:我尝试做 class Nilly < NilClass
,但我无法使用 new
方法(它已在 NilClass
中被删除)。
I want to create a class Nilly
to obtain a "pseudo-nil" object, but I need it to be evaluated as boolean false
.
e.g.:
class Nilly; end
n = Nilly.new
puts n ? 'true' : 'false' #=> I want false here
How can I do that?
P.S.: I tried to do class Nilly < NilClass
, but I coudn't use the new
method (it was stripped out in NilClass
).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Ruby 中的布尔逻辑仅允许
nil
和false
为falsy
,其他均为
truthy
。没有办法做到这一点。
我可以问你为什么想要这个吗?
您的
Nilly
课程有什么特别之处?我建议你用不同的方式称呼它。
并在你的逻辑中使用它
Boolean logic in Ruby ONLY allows
nil
andfalse
to befalsy
Everything else is
truthy
.There is no way to do this.
May I ask why you want this?
What is special about your
Nilly
class?I suggest you just call it a different way.
And use this in your logic
覆盖新方法:
与前两个解决方案不同,这正是您想要的。
n
实际上计算结果为 nil,无需使用nil?
方法进行测试。to_s
解决方案仅在您put
时才有效,这会隐式调用to_s
。Override the new method:
Unlike the previous two solutions, this does exactly what you want.
n
actually evaluates as nil, without the need to test with anil?
method. Theto_s
solution only works because you areputs
ing it, which implicitly callsto_s
.