gpt4 book ai didi

flash - 命名空间错误 : "Top level of a class definition"?

转载 作者:行者123 更新时间:2023-12-01 12:56:52 26 4
gpt4 key购买 nike

我正在尝试封装一个包,以便在项目之外没有意义的类、属性和方法无法访问。但是,它们确实必须由项目中的其他类访问,因此 internal 是不够的 - parent.foo.AClass 的内部属性不能被访问parent.bar.AnotherClass。我的印象是命名空间可以解决这个问题,所以我尝试了这个:

//Class in top level package, where we make our namespaces
package parent {
public namespace myproject;
internal namespace myproject_internal;

myproject class Top {
//code
}
}

//Some class not meant for use outside of the project
package parent.foo {
use namespace myproject;
use namespace myproject_internal;

myproject_internal class AClass {
//code
}
}

//Some other class that can be accessed outside of the project,
//but is in a different subpackage
package parent.bar {
use namespace myproject;
use namespace myproject_internal;

myproject class AnotherClass {
//code
}
}

但是,这会在类定义 (myproject class AnotherClass) 的 AnotherClass 中引发编译器错误:“用户定义的命名空间属性只能在顶部使用类定义的级别。”这意味着什么? namespace 是否意味着以其他方式使用?

最佳答案

错误被抛出,因为你试图将命名空间应用到你的整个类,但用户定义的命名空间仅限于与变量和函数一起使用(“类定义的顶级”意味着“元素 一个类")。如果你要说“但那是愚蠢的!”我只能同意你的看法——让类和接口(interface)也可以使用命名空间会更有意义。仍然:那些是规则。 :(

我还认为您的命名空间定义不正确。如果要为多个类使用命名空间,则应在单独的文件中声明它。像这样的东西:

package my_package {
public namespace myproject;
}

/my_package/myproject.as

package my_package {
internal namespace myproject_internal;
}

/my_package/myproject_internal.as 中。

请注意,在这种情况下,internal 指定命名空间本身 的可见性,而不是您使用它的函数和变量的可见性 - 这些将是可见的在自定义命名空间内(呃!)。如果您要使用 internal 命名空间,您的实现类必须驻留在同一个包中 - 否则将无法访问该命名空间。

参见 Grant Skinner's blog post有关命名空间的综合信息。

最后但同样重要的是,我强烈建议不要使用“parent”作为包名——除了它是一个非常模糊的名称外,当与显示对象一起使用时,这很容易导致命名冲突,其中 parent 指的是实际的父对象。

关于flash - 命名空间错误 : "Top level of a class definition"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com