我必须找到一种动态创建对象的方法,这意味着用户可以在程序启动后决定要创建多少个对象。我试图做的是:
if count = 6 then
create player1.player
create player2.player
create player3.player
create player4.player
create player5.player
create player6.player
elseif count > 4 then
create player1.player
create player2.player
create player3.player
create player4.player
create player5.player
elseif count > 3 then
create player1.player
create player2.player
create player3.player
create player4.player
elseif count > 2 then
create player1.player
create player2.player
create player3.player
else
create player1.player
create player2.player
end
一旦用户选择了玩家数量,变量计数就会更新,并且会调用创建对象的功能。
我使用了这种强力方法,而不是循环,因为我需要对象的“名称”,我必须在程序中再次调用它们。
无论如何编译器给我一个VEVI错误,变量没有正确设置。 一些帮助?
答案 0 :(得分:1)
您有这个编译器错误,因为您的player1到player6被声明为附加(这是默认值)。如果在执行程序期间变量或属性可以为void,则必须将其声明为可分离。例如:
player1: detachable PLAYER
之后,每次要使用变量或属性时,都必须测试它的附件(即使你知道附件,编译器也不要这样):
if attached player1 as la_player1 then
...
do_something_with(la_player1)
...
end
这样,编译器就会知道你使用了一个附加对象,并且在没有给你任何VEVI错误的情况下编译。
答案 1 :(得分:0)
如果所有变量playerN
都是声明为附加的类的属性(如果类型为PLAYER
,则可能是这种情况,前提是默认情况下附加类类型,或者类似于attached PLAYER
的类型,否则它们都应该在创建过程结束时初始化。
假设某些属性可以是void
,相应的类型声明应该看起来像detachable PLAYER
。
在示例中,有2个变量始终附加到对象,4个变量可能附加到对象,也可能不附加到对象。因此,他们需要声明为
player1, player2: PLAYER
player3, player4, player5, player6: detachable PLAYER
如果示例代码在创建过程中出现且player1
和player2
始终初始化。
然后可以无保护地访问player1
和player2
,但对于其他玩家,代码类似于
if attached player5 as p then
p.whatever
end
将是必需的。
如果所有player
属性都可以void
,则所有属性都需要声明为detachable PLAYER
。