How do I check if a property exists for an empty object?

I have a function that gets passed an object named exObj . The intent is this object can be one of a set of custom class objects that I have created. If the passed object has a property or method (sometimes I can't assign the property and have to use a static method instead) that has a specific name, there is an additional set of commands that are executed. So, I start that block of code with
if ( isprop(exObj, "flagged" ) || ismethod(exObj, "flagged") )
The problem is, the object passed COULD be an empty version of the object. In that case, as described in the help pages here: https://www.mathworks.com/help/matlab/ref/isprop.html isprop returns an empty logical array and I get the error:
Operands to the logical AND (&&) and OR (||) operators must be convertible to logical scalar values. Use the ANY or ALL functions to reduce operands to logical scalar values.
Interestingly, ismethod does not give the same error. I still want to execute the code block if that property exists - so I can't just add if ~isempty(exObj) before this statement. So, how can I check that this property exists on an empty object?

1 件のコメント

Les Beckham
Les Beckham 2023 年 10 月 18 日
I'm not an OOP expert by any means, but don't you know which classes have that property and which don't? Couldn't you check class(exObj) instead of checking for the presence of a certain property?

サインインしてコメントする。

回答 (1 件)

Captain Karnage
Captain Karnage 2023 年 10 月 18 日

1 投票

After typing it out and pondering for just a little bit, I figured it out. Would still be nice if isprop worked, but this statement works:
ismember( "flagged", properties(exObj) )

カテゴリ

ヘルプ センター および File ExchangeSimulink Check についてさらに検索

製品

リリース

R2023a

タグ

質問済み:

2023 年 10 月 18 日

回答済み:

2023 年 10 月 18 日

Community Treasure Hunt

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

Start Hunting!

Translated by