# Simplifying a "if" statement that checks there is at most one vector

1 ビュー (過去 30 日間)
Marcelin Dierickx 2019 年 1 月 15 日

Hello,
I have got a code looking like this:
if (length(a)>1 && max([length(b) length(c)])>1) || (length(b)>1 && max([length(a) length(c)])>1) || (length(c)>1 && max([length(a) length(b)])>1)
fprintf('This code only allows one non-scalar variable at a time')
return
end
Which stops the scripts if two or more of a, b and c are vector. In my real code there are 8 variables so the "if" is really, really long.
I wanted to know if there is a way to write it another way to make the "if" shorter.

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

### 採用された回答

OCDER 2019 年 1 月 15 日
a = [1 0 0 1];
b = [2 2 1 2];
c = 4;
if sum(~cellfun(@isscalar, {a b c})) > 1 %You have more than 1 non-scalar
fprintf('This code only allows one vector at a time.\n');
return
end
If your function is uses varargin, you could do this:
%Out = myFunc(a, b, c)
function Out = myFunc(varargin)
Out = [];
if nargin ~= 3
fprintf('Need 3 inputs.\n');
return
elseif sum(~cellfun(@isscalar, varargin)) > 1
fprintf('This code only allows one vector at a time.\n');
return
end

#### 1 件のコメント

Marcelin Dierickx 2019 年 1 月 15 日
It works, I'll research on the function you use.
Opens me new possibilities.
Thank you :-)

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

R2016b

### Community Treasure Hunt

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

Start Hunting!

Translated by