- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想知道 nil
单例对象在 Ruby 源代码中的何处被实例化。
有什么想法吗?
最佳答案
如果我们查看 Github 上的 Ruby 源代码,我们可以看到大部分内核功能都在 InitVM_Object
中初始化。 .然而,nil
明显不存在,唯一存在的线索是
/*
* An obsolete alias of +nil+
*/
rb_define_global_const("NIL", Qnil);
诚然,我实际上并不知道 NIL
甚至可以在 Ruby 中工作,但这不是重点。现在我们知道,在 Ruby 的 C 代码中,Qnil
是我们的“nil”对象。事实证明,我们可以将其追溯到 它 的起源,在 ruby.h
中. Qnil
不是变量;这是一个 #define
编译指示。
#define Qnil RUBY_Qnil
RUBY_Qnil
另一方面,被定义为枚举常量。
enum ruby_special_consts {
RUBY_Qfalse = 0x00, /* ...0000 0000 */
RUBY_Qtrue = 0x14, /* ...0001 0100 */
RUBY_Qnil = 0x08, /* ...0000 1000 */
...
}
所以看起来 nil
只是 Ruby 中一个幸福的谎言。它甚至根本不是一个真实的对象;这只是一个特殊的魔法数字。 true
和 false
也在同一个枚举中定义。事实上,我们可以检查 Ruby 本身是否准确。
irb(main):009:0> false.object_id
=> 0
irb(main):010:0> true.object_id
=> 20
irb(main):011:0> nil.object_id
=> 8
false
、true
和 nil
的标识符都等于*我们在枚举中找到的值,所以看起来像这样。
值得注意的是,虽然 nil 本身在 VM 中是一个幸福的谎言,但 nil
上的方法当然是非常真实的。 NilClass
在 InitVM_Object
中定义,它的方法也是如此。但 nil
本身从未被初始化。
* 从技术上讲,您的值可能不同。此处列出的枚举值受 #if USE_FLONUM
block 保护,该 block 的设置或取消设置取决于系统上各种常量的大小。您可以在 ruby.h
中查看该标志的标准以及其他几个类似的标准。 .
关于ruby - 'NilClass'单例实例在哪里实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51384887/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!