试试这个
p RUBY_VERSION
p s = ""
p s.nil?
p s.empty?
p s.nil? || s.empty?
p (s.nil? or s.empty?)
输出:
"2.0.0"
""
false
true
true
true
解释:
s.nil?
#=> false
s.nil?.or.empty?
#NoMethodError: undefined method `or' for false:FalseClass
# from (irb):5
# from C:/Ruby200/bin/irb:12:in `<main>'
上面的错误是因为s.nil?
给了false
andfalse
是 的一个实例FalseClass
,并且这个类没有or
任何方法。所以实际的修复如上所示。
编辑:
p RUBY_VERSION
class Object
alias :oldnil :nil?
def nil?
@@x = self
oldnil
end
end
class FalseClass
def or
empty?
end
def empty?
@@x.empty?
end
end
class TrueClass
def or
empty?
end
def empty?
@@x.empty?
end
end
s = ""
p s.nil?
p s.empty?
p s.nil? || s.empty?
p s.nil?.or.empty?
输出:
"2.0.0"
false
true
true
true