есть способ ввода для if, если:
var = (cond) ? true : false;
или мы должны использовать этот формат?
if (cond)
true
else
false
end
есть способ ввода для if, если:
var = (cond) ? true : false;
или мы должны использовать этот формат?
if (cond)
true
else
false
end
MatLab не имеет тернарного оператора или любого другого синтаксического сахара для однострочных if-утверждений. Но если ваш if-statement действительно прост, вы можете просто написать его в одной строке:
if (cond); casetrue(); else; casefalse(); end
Это не так просто, как тернарный оператор, но все же лучше, чем писать его в 5 строках кода.
Если вам нужно только true или false, вы можете сделать то, что предлагает MatlabSorter
. Если вам нужен настоящий третичный оператор (т.е. a = b ? c : d
), в MATLAB его нет. Однако, используя файл здесь, вы можете приблизиться.
Вы можете сделать
var = 5 > 4;
который установит var в true. Просто замените то, что вам нужно для 5 > 4.
MATLAB не имеет условных выражений, но в некоторых ситуациях вы можете получить аналогичный эффект, например, var = cond*true_expr + (1-cond)*false_expr
. В отличие от условного выражения C, это всегда будет оценивать как true_expr
, так и false_expr
, а если cond
не должно быть 0 или 1 (примечание: false
ведет себя как 0; true
ведет себя как 1) вы получите сумасшедшие результаты.
Хм... никто не упомянул об этом
fi = @(varargin)varargin{end-varargin{1}}
где-то в документах написано, что "конец" подходит к одному, так что это будет больше будущего доказательства
fi = @(varargin)varargin{length(varargin)-varargin{1}}
Использование:
fi(input('Do you like Matlab ? '),'yes','no')
>> no
Если вы нуждаетесь в встроенных случаях, см. Mathworks...
Я часто использую этот стиль:
cond = what < ever;
n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform
достаточно компактна, чтобы не требовать вспомогательной функции
Это работает хорошо.
var = {true,false}{2-cond}