From 27d0f612885afe60d2cbf034367fee038a81587e Mon Sep 17 00:00:00 2001 From: Federico Felici <federico.felici@epfl.ch> Date: Thu, 24 Oct 2019 16:19:15 +0200 Subject: [PATCH] Allow function handles as init functions --- code/classes/SCDclass_algo.m | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/code/classes/SCDclass_algo.m b/code/classes/SCDclass_algo.m index c0f720b..c00a001 100644 --- a/code/classes/SCDclass_algo.m +++ b/code/classes/SCDclass_algo.m @@ -239,14 +239,28 @@ classdef SCDclass_algo function callinits(obj) - if(~isempty(obj.stdinits)) - for(ii=1:numel(obj.stdinits)) + % call initialization functions that set fixed parameters + if ~isempty(obj.stdinits) + for ii=1:numel(obj.stdinits) - fprintf('Calling init function ''%s'', assigning its output to ''%s'' ...\n',char(obj.stdinits{ii}{1}),char(obj.stdinits{ii}{2})); - initcmd=sprintf('[fp]=%s(obj);', char(obj.stdinits{ii}{1})); - eval(initcmd); - Simulink.data.assigninGlobal(obj.modelname, char(obj.stdinits{ii}{2}), fp); - + initfunction = obj.stdinits{ii}{1}; + targetname = obj.stdinits{ii}{2}; + + fprintf('Calling init function ''%s'', assigning its output to ''%s'' ...\n',... + char(initfunction),char(targetname)); + + if ischar(initfunction) + initcmd=sprintf('%s(obj);', initfunction); + value = eval(initcmd); + elseif isa(initfunction,'function_handle') + value = initfunction(obj); % call function handle directly + else + error('initfunction must be a string or a function handle') + end + + % assigns in base workspace or datadictionary depending + % on where the target variable is + Simulink.data.assigninGlobal(obj.modelname, targetname, value); end end end -- GitLab