Method chaining unexpected behaviour?
조회 수: 12 (최근 30일)
이전 댓글 표시
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
채택된 답변
Philip Borghesani
2017년 12월 20일
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
Philip Borghesani
2017년 12월 20일
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.
추가 답변 (1개)
Image Analyst
2017년 12월 19일
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);
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!