NilClass,TrueClass和FalseClass的目的是什么?

saw*_*awa 6 ruby null language-design

NilClass,TrueClassFalseClass有一个实例的每个,即nil,true并且false,这是常量,什么是具有这些类的目的是什么?为什么它们不能成为Object类的实例,所有相关的方法都可以简单地定义为单例方法nil,true并且false?一个相关的问题是,为什么这些没有被定义为常数?

小智 11

它始终坚持"一切都是对象"和"对象由它们所属的类来专门化"的想法.

nil,truefalse都是对象(因此是具有方法的类的实例化).它们是:1)各类型的唯一居民,都是2)不可变对象实行允许实现优化 -真的,是不是一个 nil就够了吗?

没有专门化值的有用错误消息:x.class"只是工作".

> > nil.foo
> => #<NoMethodError: undefined method `foo' for nil:NilClass>
Run Code Online (Sandbox Code Playgroud)

我很高兴它说NilClass:-)

这种类 - 实例方法也使得重新打开NilClass- 无论好坏 - 与其他类型的方式一样容易和一致.

至少从Ruby 1.9.2开始,它不可能重新分配true,false或者nil(Python 2.x允许重新分配True/False,但不在Python 3.x中).请注意,因为true/false/nil它们不是常量,所以它们可以优化为AST - 或者无论实现使用什么 - 作为"文字值"而不进行常量查找.

> > VERSION
> => "1.9.2"
> > true = false­
> => #<SyntaxError: Can't change the value of true>
> > [].each {|tru­e|}
> => #<SyntaxError: Can't change the value of true>
Run Code Online (Sandbox Code Playgroud)

快乐的编码.