Method chaining unexpected behaviour?
13 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Benjamin Chen
il 19 Dic 2017
Commentato: Benjamin Chen
il 20 Dic 2017
I have noticed some unexpected behaviour with method chaining. Specifically I have a class A from which I want to call the static method to create class B:
classdef A
methods (Static)
function b = getB(args)
b = B(args);
end
end
end
And then I want to use class B to do something e.g. use the print() method, where class B is:
classdef B
properties
Property1
end
methods
function self = B(args)
self.Property1 = args;
end
function print(self)
fprintf(self.Property1);
end
end
end
Trying
A.getB(args).Property1
succeeds.
I would thus also expect
A.getB(args).print()
to succeed, however, it gives the error:
Not enough input arguments.
Error in A.getB (line 5)
b = B(args);
Would anyone have any suggestions on why this is so? Thanks very much in advance.
0 Commenti
Risposta accettata
Philip Borghesani
il 20 Dic 2017
In general indexing into the output of a function call, what you call method chaining is not supported in MATLAB. Property access currently works on the output of a static function but function calls in general do not. You may find that your code behaves differently on different versions of MATLAB.
Try
A.getB(args).print; % works because it looks like property access, not recommended
print(A.getB(args)); % will work
obj=A.getB(args); obj.print(); % or print(obj) will also work
5 Commenti
Philip Borghesani
il 20 Dic 2017
I agree, the error message should have been better.
This appears to be fixed so that a static call works correctly in a future version of MATLAB.
Più risposte (1)
Image Analyst
il 19 Dic 2017
fprintf(self.Property1);
needs two inputs, a format string, and a variable. You only passed it the variable without passing it a format specifier string like '%f\n' or something (depends on the type of variable you want to print).
fprintf('The value = %f\n', self.Property1);
Vedere anche
Categorie
Scopri di più su Construct and Work with Object Arrays in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!