MATLAB GUI - 访问器方法或属性编辑?什么是最佳做法?

时间:2016-08-09 02:16:28

标签: matlab matlab-figure matlab-guide

我正在学习如何编写MATLAB GUI并使用GUIDE。我很好奇什么是更好的做法:使用MATLAB' set()'用于编辑对象属性的函数,或者只是用于编辑对象属性的点运算符。

比如说我有一个可编辑的文本框。此文本框的标记是' string_fs'。我发现有两种方法可以更改此对象的字符串:

handles.string_fs.String = 'hello';

set(handles.string_fs, 'String', 'hello');

一种方法与另一种方法有什么好处吗?

1 个答案:

答案 0 :(得分:2)

这主要是个人偏好,除非您需要编写可在MATLAB的HG2之前版本(R2014b之前)中运行的代码,在这种情况下您需要使用setget以保持向后兼容性。

使用setget方法有以下几个优势:

同时操作多个物体

您可以拥有一组对象或句柄,并同时更改所有对象的属性

ax(1) = subplot(1,2,1);
ax(2) = subplot(1,2,2);

% Change the font weight of both axes object to be the same
set(ax, 'FontWeight', 'bold')

% Change the font weight to be different for each
set(ax, {'FontWeight'}, {'bold'; 'normal'})

你可以用点表示法做类似的事情,但我认为它的可读性稍差

[ax.FontWeight] = deal('bold');

同时更改多个属性

您可以在一个声明中更改多个属性的值,我认为这些值可以帮助您提高可读性并保持代码简洁。

set(ax, 'FontSize', 20, 'FontWeight', 'bold', 'FontName', 'arial')

正如@Hoki的评论所指出的,如果要更新相互依赖的属性,这一点尤为重要。例如,修改绘图的XDataYData,它们都需要具有相同的大小。

所以这个:

hplot = plot(1, 1);
set(hplot, 'XData', rand(10, 1), 'YData', rand(10, 1))

而不是:

hplot = plot(1, 1);

set(hplot, 'XData', rand(10, 1))
% Plot won't render here

set(hplot, 'YData', rand(10, 1))
% Plot will be able to render

以编程方式获取可能的值

使用点表示法,您可以使用制表符完成来获取可能值的列表;但是,您可以使用set以编程方式执行此操作,只需提供值即可。

possible = set(axes, 'FontWeight')

%   'normal'
%   'bold'  

缩短且不区分大小写的属性

我不建议使用下两个,但setget可以使用它们。

使用setget方法,您不必提供整个属性名称,只需要足够的字母即可。

set(ax, 'FontW', 'bold')

使用setget时,属性名称不区分大小写

set(ax, 'fontweight', 'bold')