玩家对象的元胞数组未打印所有字段

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)]

以上是关于玩家对象的元胞数组未打印所有字段的主要内容,如果未能解决你的问题,请参考以下文章

c程序打印未知大小的字符串数组的元素

matlab中的元胞数组中的数字是字符型保存,存在nodata。。如何转换成数值型矩阵????

如何在 MATLAB 的元胞数组中搜索字符串?

matlab中的元胞数组如何实现批量的赋值呢?

写给进阶玩家的 React 事件系统原理

Java检查玩家ID