【问题标题】:Why do I get a “Too many input arguments” error when passing in proper parameters?为什么在传入正确的参数时会出现“输入参数过多”错误?
【发布时间】:2012-12-21 04:55:21
【问题描述】:

为什么会出错:

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

==>usage_dynamicVariableNaming 在 11 结果中出错= dataHolder.ensureCellType(str);

当我传入正确数量的参数时?

% 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 

感谢您的大力帮助。 它现在运行,但没有插入数据。

我在这个新问题上开始了一个新线程: The data is not inserted successfully into object

【问题讨论】:

    标签: matlab oop matlab-class


    【解决方案1】:

    除非您打算将ensureCellType 用作静态方法(在这种情况下,您应该使用(Static=true) 声明它,您应该给它签名cellData = ensureCellType(obj,value)obj 在方法。

    您看到的错误是因为 MATLAB 将对象本身和 value 都传递到您的方法中,这是两个输入参数,而不是一个。

    如果您永远不需要在方法中引用obj,您可以将方法签名声明为cellData = ensureCellType(~, value)。然后 MATLAB 会知道它应该有两个输入,但它可以忽略第一个的传递。

    【讨论】:

    • addVariables() 仍然给出错误。 ================================================== ==== ???使用 ==> addVariables 时出错 输入参数过多。 ==> usage_dynamicVariableNaming 在 14 dataHolder.addVariables(dataHolder, elementNames(i), elementTypes(i), elementValues(i)) 中出错;
    • 您需要将您的方法签名定义为output = methodName(obj, otherInputs),但您需要将您的方法称为output = obj.methodName(otherInputs)obj 作为第一个输入参数隐式传递 - 如果你直接传递它,将会有一个额外的输入参数给你你看到的错误。
    猜你喜欢
    • 2010-10-17
    • 2016-05-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多