创建动态对象 (Eiffel)
Creating dynamic objects (Eiffel)
我必须找到一种动态创建对象的方法,这意味着用户可以在程序启动后决定创建多少对象。我试图做的是:
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
一旦用户选择了玩家数量,变量计数就会更新,创建对象的功能就会被调用。
我用的是这种暴力破解的方法,而不是循环,因为我需要对象的"names",所以在程序中又要调用它们
无论如何,编译器给我一个 VEVI 错误,变量设置不正确。
有帮助吗?
你有这个编译器错误,因为你的 player1 到 player6 被声明为附加的(这是默认的)。如果一个变量或属性在程序执行期间可以为空,则必须将其声明为可分离的。例如:
player1: detachable PLAYER
之后,每次你想使用你的变量或属性,你必须测试它的附件(即使你知道它是附加的,编译器不知道)像这样:
if attached player1 as la_player1 then
...
do_something_with(la_player1)
...
end
这样,编译器就会知道您使用了附加对象,并且会在不给您任何 VEVI 错误的情况下进行编译。
如果所有变量 playerN
都是声明为附加的 class 的属性(如果它们属于像 PLAYER
这样的类型,则可能是这种情况,前提是 class 类型是默认附加的,或者像 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
.
我必须找到一种动态创建对象的方法,这意味着用户可以在程序启动后决定创建多少对象。我试图做的是:
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
一旦用户选择了玩家数量,变量计数就会更新,创建对象的功能就会被调用。
我用的是这种暴力破解的方法,而不是循环,因为我需要对象的"names",所以在程序中又要调用它们
无论如何,编译器给我一个 VEVI 错误,变量设置不正确。 有帮助吗?
你有这个编译器错误,因为你的 player1 到 player6 被声明为附加的(这是默认的)。如果一个变量或属性在程序执行期间可以为空,则必须将其声明为可分离的。例如:
player1: detachable PLAYER
之后,每次你想使用你的变量或属性,你必须测试它的附件(即使你知道它是附加的,编译器不知道)像这样:
if attached player1 as la_player1 then
...
do_something_with(la_player1)
...
end
这样,编译器就会知道您使用了附加对象,并且会在不给您任何 VEVI 错误的情况下进行编译。
如果所有变量 playerN
都是声明为附加的 class 的属性(如果它们属于像 PLAYER
这样的类型,则可能是这种情况,前提是 class 类型是默认附加的,或者像 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
.