self
可以评估为false还是nil?
例如......
class FooBar
...
def check_this
self && check_something_else
end
end
此条件中的self &&
是否必要?
答案 0 :(得分:10)
是。请记住,Ruby中的所有内容都是一个对象,因此self
对false
和nil
来说是假的:
nil.instance_eval { self } # => nil
false.instance_eval { self } # => false
答案 1 :(得分:5)
是的,但只是在一些非常奇怪的情况下:
irb(main):001:0> def false.test
irb(main):002:1> puts "hello" if !self
irb(main):003:1> end
=> nil
irb(main):004:0> false.test
hello
=> nil
答案 2 :(得分:3)
不,self
在普通代码中不能为零或为假。
nil
和false
是带有方法的Ruby对象。 self
分别为nil
和false
:
def nil.self
self
end
nil.self
=> nil
def false.self
self
end
false.self
=> false
这不完全是猴子修补,它是定义单例方法,但我敢打赌,这不是你想到的正常情况。
答案 3 :(得分:2)
这是Avdi Grimm关于这个主题的relevant article,显然除非在非常奇怪的情况下,例如追求NilClass
或false
,否则不可能使对象变得虚伪。
答案 4 :(得分:1)
class NilClass
def selfie
self
end
end
nil.selfie #=> nil
class FalseClass
def selfie
self
end
end
false.selfie #=> false
答案 5 :(得分:-1)
实际上,它不可能因为 - 如果一个对象是零或假 - 你不能在它上面调用一个方法,因为它不属于该类。