EVALIN cannot execute a return?
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Matt J
el 7 de Ag. de 2020
Comentada: Matt J
el 7 de Ag. de 2020
I am trying to create a function that aborts whatever mfile is currently executing after issuing a warning. I see no way of avoiding EVALIN for this and so implemented the following,
function abort_and_warn
warning 'Aborting'
evalin('caller', 'return');
end
However, a simple test of this code in R2020a,
function test
disp 'do this'
abort_and_warn
disp 'do that'
end
fails to block the execution of the final line:
>> test
do this
Warning: Aborting
> In test>abort_and_warn (line 12)
In test (line 5)
do that
Is this an undocumented limitation of EVALIN? I see nothing here to imply that EVALIN should be unable to issue the return command in the caller wokspace.
4 comentarios
Bruno Luong
el 7 de Ag. de 2020
A simple EVAL('RETURN') is not execute either
function foo
eval('return');
fprintf('this will be printed out\n');
end
>> foo
this will be printed out
>>
Respuesta aceptada
Bruno Luong
el 7 de Ag. de 2020
Editada: Bruno Luong
el 7 de Ag. de 2020
Yes it is written in the doc.
From EVALIN/EVAL document page
...
expression — Expression to evaluate
character vector | string scalar
Expression to evaluate, specified as a character vector or string scalar. expression must be a valid MATLAB expression and must not include any MATLAB keywords."
>> iskeyword('return')
ans =
logical
1
1 comentario
Bruno Luong
el 7 de Ag. de 2020
Editada: Bruno Luong
el 7 de Ag. de 2020
However
eval('global foo')
works and global is a keyword.Go figure....
That exposes few of the hidden paradoxal gems of MATLAB.
Más respuestas (1)
Fangjun Jiang
el 7 de Ag. de 2020
It seems that "return" was not executed in the "caller" workspace as it is supposed to by evalin().
But would a "regular" approach work by passing some kind of flag or value?
In function abort_and_warn, return with a flag or a special value after issuing the warning.
In function test, check the return value of function abort_and_warn, then execute return.
0 comentarios
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!