Для вызовов функции (MEX) было бы очень приятно передать сразу несколько свойств одного объекта. Вместо foo(myObj.propA, myObj.propB)
Я хочу что-то вроде foo(myObj.[propA,propB]
.Вызов функции с несколькими свойствами объекта
Возможно ли это?
С структур можно использовать функцию getfield()
, чтобы получить данные из более чем одной области, например:
getfield(myStruct, {index}, {'fieldA', 'fieldB'})
Но, к сожалению, следующая попытка получить больше, чем одно свойство из объекта приводит в погрешности (индекс превышает размеры матрицы):
getfield(myObj, {index}, {'propA', 'propB'})
Может быть, единственная возможность состоит в том, чтобы написать функцию, которая возвращает несколько выходных аргументов:
[varargout] = getProps(object,propnames)
for p=1:numel(propnames)
varargout{p} = object.(propnames{p});
end
Но если я вызываю другую функцию с этой функцией в качестве входа, например. sum(getProps(myObj,propnames))
передается только первый выходной аргумент getProps
, и я впадаю в отчаяние. Есть ли другой путь?
Возможно, мой Matlab R2011b слишком старый, но входы не передаются отдельно функции. Например, с объектом с значения свойств 'A = 1' и' B = 3': 'C = getProps (obj, {'A' 'B'})' дает 'C = [1] [3]' и 'C {:}' возвращает список, разделенный запятой ' ans = 1; ans = 3', но sum (C {:}) возвращает 'ans = 1'. – JaBe
@JaBe Затем выполнение 'myfun (C {:})' даст 'myfun' два входа. Когда вы выполняете 'sum (C {:})', это эквивалентно 'sum (1,3)', который вычисляет сумму по ** третьему размеру **, а не сумму двух чисел. Вам понадобится конкатенация для получения массива signles: '[C {:}]'. – chappjc
@JaBe Если это дало вам информацию, необходимую для этого вопроса, пожалуйста, примите. Благодаря! :) – chappjc