익명 처리가 아닙니다.
Foo = Class.new # => Foo
foo = Class.new # => #<Class:0x007fe5dd45d650>
그러나 그것은 또 다른 둥지하지 않습니다 : 일정에 동적으로 생성 된 클래스 지정이 명명하게
module Bar
Baz = Module.new do
p Module.nesting # => [Bar]
end
end
심지어 그 문제에 대한 동적 인에 관하여 :
module Quz
eval 'module Qux; p Module.nesting; end' # => [Quz::Qux, Quz]
end
스코프 게이트에 관한 내용입니다. 키워드 class
및 module
-
는 지금까지 상수에 관한 한, 두 개의 범위 게이트가 있습니다.
중첩은 순전히 구문 론적으로 수행됩니다. 즉, 이상한 얻을 이유 :
module Do
X = 42
end
module Do
module Re
p Module.nesting # => [Do::Re, Do]
p X # => 42
end
end
module Do::Mi
p Module.nesting # => [Do::Mi]
p X # => uninitialized constant
end
Do.module_eval { p X } # => uninitialized constant
Do.instance_eval { p X } # => uninitialized constant
그래서 루비
class
또는
module
이, 그것은
"현재 노드" 더 둥지 키워드를보고합니다. 닫는
end
이 발견되면 트리 위로 올라갑니다. 새로운 상수가 정의되면 현재 상수에 놓습니다.
출처
2016-11-30 16:37:20
ndn
정의 " –
흥미 롭고 익명의 모듈이 Module.nesting에 등록되어 있지 않습니다. –
@SergioTulentsev 질문에 대한 답을 수정했습니다. 전혀 중첩되지 않았을 수 있습니다. – Stefan