【发布时间】:2017-05-02 23:08:37
【问题描述】:
通用代码:
class ThingA end
class ThingB end
class ThingC end
为了为上述类型设置条件检查,我使用了基本的“if !...”构造,它产生了预期的准确结果。
示例代码如果! ...:
obj = ThingA.new
puts 'yes it is a ThingC' if !obj.is_a?(ThingA) && !obj.is_a?(ThingB) # works ok
# stdout => nothing
obj = ThingB.new
puts 'yes it is a ThingC' if !obj.is_a?(ThingA) && !obj.is_a?(ThingB) # works ok
# stdout => nothing
obj = ThingC.new
puts 'yes it is a ThingC' if !obj.is_a?(ThingA) && !obj.is_a?(ThingB) # works ok
# stdout => yes it is a ThingC
考虑到“除非”是基本“如果!...”构造的更具描述性的替代品这一事实,我使用“除非”来实现上述内容。
示例代码,除非:
obj = ThingA.new
puts 'yes it is a ThingC' unless obj.is_a?(ThingA) && obj.is_a?(ThingB) # BUG
# stdout => yes it is a ThingC
obj = ThingB.new
puts 'yes it is a ThingC' unless obj.is_a?(ThingA) && obj.is_a?(ThingB) # BUG
# stdout => yes it is a ThingC
obj = ThingC.new
puts 'yes it is a ThingC' unless obj.is_a?(ThingA) && obj.is_a?(ThingB) # ???
# stdout => yes it is a ThingC
显然,“除非”版本无法产生完全相同的准确结果。
基于这些简单直接的结果,是否有人很难得出“除非准确,否则无法处理多个条件”的结论?
【问题讨论】: