How do I create custom signatures for non-static class methods?
4 views (last 30 days)
Show older comments
Hi all,
I'm having trouble getting MATLAB to display the custom signatures for some of my non-static class methods.
For example, if I have a class:
classdef SomeClass
methods(Access = public)
function obj = SomeClass(a,b,c)
% ...
end
function this = foo(this,x,y,z)
% ...
end
end
end
a functionSignatures.json file:
{
"_schemaVersion": "1.0.0",
"SomeClass.SomeClass":
{
"inputs":
[
{
"mutuallyExclusiveGroup":
[
[
{"name":"A", "kind":"required", "type":"logical"}
],
[
{"name":"X", "kind":"required", "type":"numeric"},
{"name":"Y", "kind":"required", "type":"numeric"},
{"name":"Z", "kind":"required", "type":"numeric"}
]
]
}
]
},
"SomeClass.foo":
{
"inputs":
[
{
"mutuallyExclusiveGroup":
[
[
{"name":"A", "kind":"required", "type":"logical"}
],
[
{"name":"X", "kind":"required", "type":"numeric"},
{"name":"Y", "kind":"required", "type":"numeric"},
{"name":"Z", "kind":"required", "type":"numeric"}
]
]
}
]
}
}
and a script file:
clar,clc,validateFunctionSignaturesJSON("./functionSignatures.json");
obj = SomeClass(...);
obj.foo(...);
Line 1 completes with no messages. Line 2 gives me an autocomplete popup with 2 signatures. Line 3 shows no autocomplete popup. Any idea what I'm doing wrong?
1 Comment
Matt J
on 8 Feb 2024
Edited: Matt J
on 8 Feb 2024
Your post does not appear to be a copy-paste of the code you actually ran, which means it would be hazardous for us to assess it. In particular, there is no Matlab function called validateFunctionSignatures (although there is a function called validateFunctionSignaturesJSON). So, Line 1 should not have completed at all.
Accepted Answer
Steven Lord
on 8 Feb 2024
The foo method of your SomeClass class is an ordinary method (as opposed to a static method) so at least one of the inputs must be an instance of the SomeClass class.
From the Signature Objects section on this documentation page, "If you specify an instance method such as myClass.myMethod in the JSON file, one of the elements in inputs must be an object of myClass. Typically, this object is the first element. MATLAB supports code suggestions and completions for a specified method when you call it using either dot notation (b = myObj.myMethod(a)) or function notation (b = myMethod(myObj,a)) syntax."
The JSON file segment you posted does not satisfy this requirement.
0 Comments
More Answers (0)
See Also
Categories
Find more on Software Development Tools in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!