为什么要传递正确的参数时,我得到一个“太多的输入参数”的错误?(Why do I get a “To

2019-07-17 22:19发布

为什么我会得到一个错误:

??? 使用==> ensureCellType太多输入参数错误。

在11结果= dataHolder.ensureCellType(STR)中==误差> usage_dynamicVariableNaming;

当我传递的参数正确的号码?

% USAGE:

clear all;
clc;

elementNames = {'area_12345[<>]6789', 'apollo123', 'guruX', 'ok'};
elementTypes = {'string', 'specialChar', 'int', 'float'};
elementValues = {'charlie', 'vvv', '09', '123.321'};

dataHolder = dynamicVariableNaming;

str = 'test';
result = dataHolder.ensureCellType(str);


%% CLASS
classdef dynamicVariableNaming
%HELLO Summary of this class goes here
%   - 

   properties           
           variableNames = [];           

           variableValues = [];
           variableTypes = [];
   end

   methods (Access = public) % (Access = private)
           function obj = dynamicVariableNaming (variableName, variableValue, variableType)
           % class constructor
               if(nargin > 0)
                 obj.variableNames = variableName;                 

                 obj.variableValues = variableValue;
                 obj.variableTypes = variableType;
               end
           end  
%    end
%            
%    methods (Static = true)
           function addVariables (obj, variableName, variableValue, variableType)
                 obj.variableNames = [obj.variableNames ensureCellType(variableName)];                 

                 obj.variableValues = [obj.variableValues ensureCellType(variableValue)];
                 obj.variableTypes = [obj.variableTypes ensureCellType(variableType)];
           end               

           function cellData = ensureCellType(value)       
            if (class(value) ~= 'cell') 
                cellData = cell2string(value);
            else
                cellData = value;
            end
           end            

   end   
end 

感谢您的帮助很大。 现在运行,但数据未插入。

我开始了一个新的线程在这个新的问题: 数据未成功插入对象

Answer 1:

除非你打算ensureCellType是一个静态方法(在这种情况下,你应该声明它(Static=true) ,则应该给它的签名cellData = ensureCellType(obj,value)obj使您内的所述对象本身的引用方法。

你得到你看到的,因为MATLAB是通过在两个物体本身和错误value到您的方法,这是两个输入参数,而不是一个。

如果你将永远需要一个参考obj的方法中,你可以声明方法签名cellData = ensureCellType(~, value) 。 那么MATLAB会知道它应该有两个输入,但它也可以忽略传球第一。



文章来源: Why do I get a “Too many input arguments” error when passing in proper parameters?