如何创建一个实例可以被评估为 false 的类?

发布于 2024-12-09 15:49:05 字数 336 浏览 0 评论 0原文

我想创建一个类 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏九 2024-12-16 15:49:05

Ruby 中的布尔逻辑仅允许 nilfalsefalsy

其他均为 truthy

没有办法做到这一点。

我可以问你为什么想要这个吗?
您的 Nilly 课程有什么特别之处?

我建议你用不同的方式称呼它。

class Nilly
  def nil?
    true
  end
end

并在你的逻辑中使用它

puts n.nil? ? 'false' : 'true'

Boolean logic in Ruby ONLY allows nil and false to be falsy

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.

class Nilly
  def nil?
    true
  end
end

And use this in your logic

puts n.nil? ? 'false' : 'true'
苦行僧 2024-12-16 15:49:05

覆盖新方法:

class Nilly < NilClass
  def Nilly.new
  end
end

n = Nilly.new
puts n ? 'true' : 'false'    #=>  I want false here

与前两个解决方案不同,这正是您想要的。 n 实际上计算结果为 nil,无需使用 nil? 方法进行测试。 to_s 解决方案仅在您 put 时才有效,这会隐式调用 to_s

Override the new method:

class Nilly < NilClass
  def Nilly.new
  end
end

n = Nilly.new
puts n ? 'true' : 'false'    #=>  I want false here

Unlike the previous two solutions, this does exactly what you want. n actually evaluates as nil, without the need to test with a nil? method. The to_s solution only works because you are putsing it, which implicitly calls to_s.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文