Method chaining unexpected behaviour?
4 ビュー (過去 30 日間)
古いコメントを表示
Benjamin Chen
2017 年 12 月 19 日
コメント済み: Benjamin Chen
2017 年 12 月 20 日
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 で Construct and Work with Object Arrays についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!