2015-11-02 40 views
0

我写了一个基本的类定义如下:单元阵列对象不打印所有字段

classdef player 

    properties 
     team 
     name 
     rating 
     ranking 
    end 

    methods 
    end 

end 

我得到的球员对象的单元阵列,叫allPlayers,与每一个领域,但排名已设置。然后我打电话给它下面的功能:

function setRankings(players) 
    for i = 1 : length(players) 
     players{i}.ranking = i; 
    end 
end 

在这一点上,应该设置每个球员对象的所有领域。我把下面的函数来显示每个字段:

function displayPlayers(players) 
    for i = 1 : length(players) 
     current = players{i}; 
     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设置。

这是为什么?

+2

排名没有被设置,因为'player'是一个值类,而不是句柄,并且你没有从函数返回修改后的对象。不同的简单解释是[可以在这里](http://stackoverflow.com/questions/27077642/matlab-classes-getter-and-setters/27079193#27079193)。 – TroyHaskin

回答

1

为了获得你想要的行为,你必须让你的班级成为'处理'班 - 而不是'价值'班。有关更多信息,请参阅此link

这是如何做到这一点:

classdef player < handle 

    properties 
     team 
     name 
     rating 
     ranking 
    end 

    methods 
    end 

end 

注意,您可以使用值类也是如此,但在这种情况下,你不得不返回setRanking玩家的新名单。

+0

太好了,谢谢!任何想法为什么排名将被设置为字符而不是整数?我指出我的范围从1到长(球员),所以我有点失落。再次感谢! – bclayman

+1

'disp(['Ranking:',num2str(current.ranking)]' – gregswiss