Во-первых, ==
- это , а не - это то же самое, что isequal
. Функция, которая вызывается при использовании ==
, равна eq
, и область действия каждого из них различна.
Например, в eq(A,B)
, если B
является скаляром, функция проверяет каждый элемент A
на равенство с B
и возвращает логический вектор.
eq([2,5,4,2],2)
ans =
1 0 0 1
Тем не менее, isequal(A,B)
проверяет, является ли A
равным равным B
во всех аспектах. Другими словами, MATLAB не может определить разницу между A
и B
. Делаем это для приведенного выше примера:
isequal([2,5,4,2],2)
ans =
0
Я думаю, что вы действительно намеревались задать в вопросе, но не ответили:
"Почему ==
не определено для массивов ячеек?"
Ну, простая причина в том, что клетки не были предназначены для такого использования. Вы можете легко увидеть, как реализация такой функции для ячеек может быстро усложниться, если вы начнете рассматривать отдельные случаи. Например, рассмотрим
{2,5,{4,2}}==2
Каким вы ожидаете получить ответ? Разумное предположение будет
ans = {1,0,0}
что справедливо. Но скажем, я не согласен. Теперь я хотел бы, чтобы операция равенства прошла по вложенным ячейкам и вернула
ans = {1,0,{0,1}}
Можете ли вы не согласиться с этой интерпретацией? Возможно нет. Это в равной степени верно, а в некоторых случаях это поведение, которое вы хотите.
Это был просто простой пример. Теперь добавьте к этому смесь вложенных ячеек, разных типов и т. Д. Внутри ячейки и подумайте над обработкой каждого из этих угловых случаев. Для разработчиков быстро становится кошмаром реализовать такую функциональность, которая может быть удовлетворительно использована всеми .
Таким образом, решение состоит в том, чтобы перегрузить функцию, реализуя только те специальные функции, которые вы желаете использовать в вашем приложении. MATLAB также предоставляет способ сделать это, создав каталог @cell
и определив eq.m
для использования с ячейками так, как вам нужно 1061 *. Рамашаланка продемонстрировал это в своем ответе .