saw*_*awa 6 ruby null language-design
NilClass
,TrueClass
并FalseClass
有一个实例的每个,即nil
,true
并且false
,这是常量,什么是具有这些类的目的是什么?为什么它们不能成为Object
类的实例,所有相关的方法都可以简单地定义为单例方法nil
,true
并且false
?一个相关的问题是,为什么这些没有被定义为常数?
小智 11
它始终坚持"一切都是对象"和"对象由它们所属的类来专门化"的想法.
nil
,true
和false
都是对象(因此是具有方法的类的实例化).它们是: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 {|true|}
> => #<SyntaxError: Can't change the value of true>
Run Code Online (Sandbox Code Playgroud)
快乐的编码.
归档时间: |
|
查看次数: |
844 次 |
最近记录: |