Cannot find 'set' method for .... class

Matlab complains about a set method that has already been defined. The error message is, when I type in the command:
set(a, 'prop1', 1)
"Error using set. Cannot find 'set' method for aSimpleValueClass class".
classdef aSimpleValueClass
properties
prop1
end
methods
function obj = set.prop1(obj, x)
obj.prop1 = x;
end
end
end
Can someone tell me why?

 采纳的回答

You would need to have defined a method named set for that case. The set.prop1 method is called for the case where you use
a.prop1 = value

8 个评论

I thought (in the body of my classdef)
function obj = set.prop1(obj, value)
end
IS my set method, according to the OOP manual and examples.
When I look at the documentation, it appears to me you would need a method named just set in order to use set() as a call.
Somehow I thought my syntax was correct based on this manual page (please click on the hyperlink):
The set method has a difference, I noticed though from the manual, between a value class and a handle class: "Value class set functions must return the modified object to the calling function. Handle classes do not need to return the modified object." However, I re-typed
a = set(a, 'prop1', 3.0);
did not make the error message go away.
@Yves, no, you misunderstood. A property set method is used when you want to override what happens when you do
obj.property = value;
and it only works when you use that syntax. If you want to be able to set or get property with a generic set or get function, as works for graphics objects, you need to derive from matlab.mixin.SetGet which will automatically provide these methods. Note that matlab.mixin.SetGet forces your class to be a handle class, so the syntax would have to be
set(a, 'prop1', 3.0);
If you want do have a value class and a generic set method you'll have to write it yourself. The function will be defined as
methods
function obj = set(obj, property, value)
%code to set property, eg:
if isprop(obj, property)
obj.(property) = value;
end
end
end
The above function would still live alongside the set.prop1 function if you want to override what happens when assigning to prop1 (e.g. validate inputs)
Ahh...I see. Thx, Guillaume.
Also, thanks by me!
Best!

请先登录,再进行评论。

更多回答(2 个)

sneha pc
sneha pc 2020-5-3

0 个投票

error- set is not comaptable with sym class. what to do
M = 0.5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;
q = (M+m)*(I+m*l^2)-(m*l)^2;
syms s
Ppend=((m*l*s^2)/q)/(s^4+(b*(I+m*l^2)*s^3)/q-((M+m)*m*g*l*s^2)/q-(b*m*g*l*s)/q);
disp(Ppend);
Pcart=(((I+m*l^2)*s^2-g*m*l)/q)/(s^4+(b*(I+m*l^2)*s^3)/q-((M+m)*m*g*l*s^2)/q-(b*m*g*l*s)/q);
disp(Pcart)
sys_tf = [P_cart ; P_pend];
inputs = {'u'};
outputs = {'x'; 'phi'};
set(sys_tf,'InputName',inputs)
set(sys_tf,'OutputName',outputs)
sys_tf;
Walter Roberson
Walter Roberson 2020-5-3

0 个投票

You created a symbolic expression that looks like a transfer function, and you are expecting that it is suddenly the transfer function datatype instead of being symbolic.
You should use the routine in this link:
https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/26553/versions/2/previews/sym2tf.m/index.html

类别

帮助中心File Exchange 中查找有关 App Building 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by