1

我必须找到一种动态创建对象的方法,这意味着用户可以决定程序启动后要创建多少个对象。我试图做的是:

                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 错误,变量设置不正确。一些帮助?

4

2 回答 2

1

您有此编译器错误,因为您的 player1 到 player6 被声明为附加(这是默认值)。如果变量或属性在程序执行期间可以为空,则必须将其声明为可分离的。举个例子:

player1: detachable PLAYER

之后,每次你想使用你的变量或属性时,你都必须像这样测试它的附件(即使你知道它是附加的,编译器也不知道):

if attached player1 as la_player1 then
    ...
    do_something_with(la_player1)
    ...
end

这样,编译器就会知道您使用了附加对象,并且编译时不会给您任何 VEVI 错误。

于 2016-01-06T17:17:04.160 回答
0

如果所有变量playerN都是声明为附加的类的属性(如果它们属于PLAYER默认附加的类类型或attached PLAYER其他类型的类型,则可能是这种情况),它们都应该被初始化为创建过程的结束。

假设某些属性可以void,对应的类型声明应该是这样的detachable PLAYER

在示例中,有 2 个变量始终附加到对象,4 个变量可能附加到对象,也可能不附加到对象。因此它们需要被声明为

player1, player2: PLAYER
player3, player4, player5, player6: detachable PLAYER

如果示例代码出现在创建过程中player1并且player2总是被初始化

然后player1player2可以不受保护地访问,但对于其他玩家,代码类似于

if attached player5 as p then
   p.whatever
end

将被要求。

如果所有player属性都可以void,则都需要声明为detachable PLAYER

于 2016-01-06T17:27:24.450 回答