Arguments
类在v8::internal
命名空间
https://github.com/joyent/node/blob/master/deps/v8/include/v8.h#L113
namespace v8 {
// ...
namespace internal {
class Arguments;
}
// ...
}
但是,稍后在v8
命名空间中使用它来访问它
https://github.com/joyent/node/blob/master/src/handle_wrap.h#L38
using v8::Arguments;
这引出了我的问题“嵌套命名空间如何工作?”。
答案 0 :(得分:4)
他们按照您的预期工作。考虑单级命名空间(例如std::
)已嵌套在全局namesapce ::
中。除非应用using namespace std;
指令,否则只有std
名称在全局名称空间中注册,而std::
中的符号不会直接对全局名称空间可见。
添加第二层并应用相同的逻辑。 v8::internal
中的符号无法在全局命名空间或v8::
中直接访问,但using namespace v8;
指令将提取v8
符号,包括internal::
(命名空间名称,而不是它的内容)进入全局命名空间等。
您肯定知道,还有其他方法可以将单个名称拉入另一个名称空间:using
指令和typedef
指令。除非有另一个名为v8::Arguments
的类,否则有一个typedef或using指令将v8::internal::Arguments
拉为v8::
v8::Arguments
。
快速浏览node.js中的V8源代码,确实在line 1946的命名空间v8::Arguments
中定义了一个名为v8::
的类,并且命名空间v8::internal::
不是开到line 3709。