玩家对象的元胞数组未打印所有字段
Posted
技术标签:
【中文标题】玩家对象的元胞数组未打印所有字段【英文标题】:Cell Array of Player Objects Not Printing All Fields 【发布时间】:2015-11-02 23:50:25 【问题描述】:我写了一个基本的类定义如下:
classdef player
properties
team
name
rating
ranking
end
methods
end
end
我得到了一个名为allPlayers
的玩家对象元胞数组,其中除了排名之外的每个字段都已设置。然后我在上面调用下面的函数:
function setRankings(players)
for i = 1 : length(players)
playersi.ranking = i;
end
end
此时,应该设置每个播放器对象的所有字段。我调用下面的函数来显示每个字段:
function displayPlayers(players)
for i = 1 : length(players)
current = playersi;
disp(['Name: ', current.name]);
disp(['Team: ', current.team]);
disp(['Rating: ', current.rating]);
disp(['Ranking: ', current.ranking]);
end
end
不幸的是,每个玩家都打印如下(只是一个例子):
'Name: ' 'Shleifer,Sam'
Team: Yale
'Rating: ' '5.050000'
Ranking:
所以看起来排名字段实际上并不是由setRankings
设置的。
这是为什么?
【问题讨论】:
排名未设置,因为player
是一个值类,而不是句柄,并且您没有从函数返回修改后的对象。区别的简要说明是available here。
我很荣幸成为这个问题的一部分
【参考方案1】:
要获得您想要的行为,您必须使您的类成为“处理”类——而不是“价值”类。有关更多信息,请参阅此link。
这是怎么做的:
classdef player < handle
properties
team
name
rating
ranking
end
methods
end
end
请注意,您也可以使用 value class,但在这种情况下,您必须在 setRanking
中返回新的玩家列表。
【讨论】:
太好了,谢谢!知道为什么排名会设置为字符而不是整数吗?我表示我的范围从 1 到长度(玩家),所以我有点迷茫。再次感谢!disp(['Ranking: ', num2str(current.ranking)]
以上是关于玩家对象的元胞数组未打印所有字段的主要内容,如果未能解决你的问题,请参考以下文章