우리가 알듯이 (거의) 루비의 모든 것은 클래스의 인스턴스 인 객체입니다.
nil
도 목적 :NilClass로부터 nil을 어떻게 인스턴스화 할 것인가?
2.1.3 :016 > nil.object_id
=> 8
그리고 그것은 NilClass
의 인스턴스이다
2.1.3 :017 > nil.class
=> NilClass
그 목적은 new
방법을 사용하여 인스턴스화된다.
가 NilClass
검사, 나는 그것이 new
방법이없는 발견 : 더 new
방법이없는 경우 단지 호기심에서 지금
2.1.3 :021 > NilClass.methods.sort
=> [:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :allocate, :ancestors, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :constants, :define_singleton_method, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :superclass, :taint, :tainted?, :tap, :to_enum, :to_s, :trust, :untaint, :untrust, :untrusted?]
을의 NilClass
에서 인스턴스화 nil
객체는 어떻게?
1. '새 방법'일 필요는 없습니다. http://www.ruby-doc.org/stdlib-1.9.3/libdoc/singleton/rdoc/Singleton.html은'Klass # instance'를 사용합니다. 2.'nil'은 C/C++에서 하드 코딩 된 것 같습니다. (표준 Ruby ** 중 어떤 것이 사용되는지는 기억이 안납니다.) 3377 줄까지 https://github.com/ruby/ruby/blob/0ef94bd2afa035648032e382201f1c9af29c5c3a/object.c#L3360 읽기. 이것은 왜'new' (그리고'alloc')가 없는지를 설명합니다. 나는'rb_cNillClass'가 인스턴스화 된 어딘가에 있다고 생각합니다. 더 많이 알고 싶다면 github에서 찾을 수 있습니다 (github 검색 엔진을 사용하여 검색 할 때 나쁘다. 그래서 나는 뭔가를 놓친 것 같음) –