Подтвердить что ты не робот

Тройной оператор в Matlab

есть способ ввода для if, если:

var = (cond) ? true : false;

или мы должны использовать этот формат?

if (cond)
 true
else
 false
end
4b9b3361

Ответ 1

MatLab не имеет тернарного оператора или любого другого синтаксического сахара для однострочных if-утверждений. Но если ваш if-statement действительно прост, вы можете просто написать его в одной строке:

if (cond); casetrue(); else; casefalse(); end

Это не так просто, как тернарный оператор, но все же лучше, чем писать его в 5 строках кода.

Ответ 2

Если вам нужно только true или false, вы можете сделать то, что предлагает MatlabSorter. Если вам нужен настоящий третичный оператор (т.е. a = b ? c : d), в MATLAB его нет. Однако, используя файл здесь, вы можете приблизиться.

Ответ 3

Вы можете сделать

var = 5 > 4;

который установит var в true. Просто замените то, что вам нужно для 5 > 4.

Ответ 4

MATLAB не имеет условных выражений, но в некоторых ситуациях вы можете получить аналогичный эффект, например, var = cond*true_expr + (1-cond)*false_expr. В отличие от условного выражения C, это всегда будет оценивать как true_expr, так и false_expr, а если cond не должно быть 0 или 1 (примечание: false ведет себя как 0; true ведет себя как 1) вы получите сумасшедшие результаты.

Ответ 5

Хм... никто не упомянул об этом

fi = @(varargin)varargin{end-varargin{1}}

где-то в документах написано, что "конец" подходит к одному, так что это будет больше будущего доказательства

fi = @(varargin)varargin{length(varargin)-varargin{1}}

Использование:

fi(input('Do you like Matlab ? '),'yes','no')
>> no

Если вы нуждаетесь в встроенных случаях, см. Mathworks...

Ответ 6

Я часто использую этот стиль:

cond = what < ever;

n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform

достаточно компактна, чтобы не требовать вспомогательной функции

Ответ 7

Это работает хорошо.

var = {true,false}{2-cond}