命名空间 QScriptEngine 扩展
有人可以向我解释如何在 QScriptEngine 扩展中获取命名空间吗?我已经设置好了,所以我在 script/ 下有一个目录 foo/,其中有一个正在执行的 __init__.js 文件。
__setupPackage__(__extension__);
print(__extension__);
hello = function() { return 5; };
在我的 C++ 代码中: 引擎.评估(“你好();”); // 工作正常
所以我的问题是,如果像 foo/bar/whatever (foo.bar.whatever) 这样的文件层次结构都集中到全局命名空间中,那么它们的意义何在?我见过一些示例,他们尝试在代码中创建名称空间,但我似乎无法在不出现编译器错误的情况下使其正常工作。
foo = {
hello : function() { return 5; }
};
在我的 C++ 代码中:
engine.evaluate("foo.hello();");
我是否误解了 Qt 处理命名空间的方式?是否所有内容都应该被混入全局范围,无论它是从哪个文件中获取的?是否有创建这些类型的名称空间的正确示例?谢谢。
Could someone explain to me how to get namespacing in the QScriptEngine extensions? I've set it up so I have a directory foo/ under script/, with an __init__.js file being executed.
__setupPackage__(__extension__);
print(__extension__);
hello = function() { return 5; };
And in my C++ code:
engine.evaluate("hello();"); // works fine
So my question is, what's the point of the file hierarchy like foo/bar/whatever (foo.bar.whatever), if they all get lumped into a global namespace? I've seen some examples, where they try to create a namespace in the code, but I can't seem to get that to work without getting a compiler error.
foo = {
hello : function() { return 5; }
};
and in my C++ code:
engine.evaluate("foo.hello();");
Am I misunderstanding the way Qt handles namespaces? Should everything indeed be mashed into a global scope regardless of which file it was taken from? Is there a proper example for creating these type of namespaces? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JavaScript 中不存在命名空间(如 C++ 等语言中所知)。在 JS 中获得类似命名空间的行为的唯一方法是将内容封装在一个对象中,其中对象的名称定义了命名空间。
这个示例将在 JS 中创建一个“命名空间”foo,其中包含一个方法“bar”和一个命名空间“ foo.baz' 包含方法 'hello':
希望这对您有所帮助。
Namespaces (as known in languages like C++) do not exist in JavaScript. The only way to get namespace-like behaviour in JS is to encapsulate stuff in an object, in which the object's name defines the namespace
This example will create a 'namespace' foo in JS, containing a method 'bar', and a namespace 'foo.baz' containing a method 'hello':
Hope this helps you out a bit.
在 JavaScript 中,我们通过使用闭包来模拟名称空间。这对于隐藏命名空间中您不想向用户开放的某些函数和属性也很有用。
这种模式部分借用自 jQuery,但它有几个优点,因为它可以保护您的代码免受可能尝试更改值的恶意代码的侵害。窗口或未定义。
我不确定这是否完全回答了您的问题,但我希望它有所帮助!
In JavaScript we simulate name-spaces by using closure. This is also usefull for hiding certain functions and properties within your namespace that you dont want to open up to users
This pattern is partially borrowed from jQuery but It has several advantages because it protects your code from mallicious code that might try to change the value of window or undefined.
Im not sure if this totally answers your question but I hope it helps!
如果 QScriptEngine 是 JavaScript 实现,那么
或
必须 工作得很好。否则请提供您收到的语法错误的准确文本。
如果您确实需要命名空间,可以考虑我的 TIScript:http://www.codeproject.com/ KB/recipes/TIScript.aspx
If QScriptEngine is a JavaScript implementation then
or
must work just fine. Otherwise provide exact text of syntax error you are getting.
If you do need namespaces you can consider my TIScript: http://www.codeproject.com/KB/recipes/TIScript.aspx