Declaración Función exterior variable
No estoy seguro por qué no puedo hacer esto. ¿Por qué no puedo declarar una variable fuera de una función antes de que se use. Recibo un error diciendo que la temp es una función o variable indefinida. Me doy cuenta de que puedo pasar la variable en la función esteblah(temp) pero eso no es lo que quiero hacer. A continuación se muestra una versión acortada/redactada de lo que quiero hacer. Estoy tratando de añadir funcionalidad en una función existente y quiero saber cuántas veces entre. También sé que puedes resolver llamar a la variable temporal persistente dentro de la función pero no creo que sea la respuesta correcta. El mundo tampoco funciona.
temp = 0;
for i = 1:5
thisblah
end
function thisblah
temp = temp + 1;
if temp(3)
fprintf('yes a three');
end
fprintf('temp is %d, temp);
end
Pregunta hecha hace 3 años, 4 meses, 29 días - Por codeglitch
3 Respuestas:
-
Global Approach:
Como las observaciones anteriores han sugerido un ejemplo de un enfoque mundial (haciendo
temp
a global variable) está abajo. También,temp
no tendrá un tercer índice,temp(3)
simplemente aumentandolo. Para comprobar cuándo se ha introducido la función 3 veces se puede comprobarif temp == 3
.global temp; temp = 0; for i = 1: 5 thisblah end function thisblah global temp; temp = temp + 1; if temp == 3 fprintf('yes a three\n'); end fprintf('temp is %d\n', temp); end
Enfoque persistente:
Si usted hace la función en un separado
.m
archivo que puedes llamarclear thisblah
en lugar declear functions
que necesita estar allí para limpiar la variable persistente después de que el script se haya hecho ejecutar o antes de que el script se vuelva a ejecutar.clc; for i = 1: 5 thisblah end clear functions; function thisblah persistent temp if isempty(temp) temp = 0; end temp = temp + 1; if temp == 3 fprintf('yes a three\n'); end fprintf('temp is %d\n', temp); end
Además, la sintaxis de la línea necesita cambiar de:
fprintf('temp is %d, temp);
a
fprintf('temp is %d\n', temp);
Ran utilizando MATLAB R2019b
Respondida el Dec 18, 2020 a las 07:01 - por codecanvas
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando se debe a que estás tratando de acceder y modificar una variable externa
temp
dentro de la funciónthisblah
sin declararla como global. Cuando declarastemp = 0;
fuera de la función, esetemp
es una variable local del script en lugar de una variable global.Una solución sería declarar
temp
como global dentro de la funciónthisblah
para poder acceder y modificar la variable externa. Aquí tienes una versión corregida de tu código:matlab temp = 0; for i = 1:5 thisblah(); end function thisblah global temp; temp = temp + 1; if temp == 3 fprintf('yes a three\n'); end fprintf('temp is %d\n', temp); end
Al declarar
global temp;
dentro de la funciónthisblah
, le estás indicando a MATLAB quetemp
es una variable global y no una variable local. Con este cambio, el código debería funcionar como esperas. ¡Espero que esta solución te haya sido de ayuda! Si tienes alguna otra pregunta, ¡estaré encantado de ayudarte!Respondida el Dec 19, 2020 a las 07:06 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema con tu código es que estás intentando acceder a una variable fuera del alcance de la función
thisblah
. Para solucionar este problema, debes declarar la variabletemp
como una variable global dentro de la funciónthisblah
utilizando la palabra claveglobal
. Aquí tienes el código corregido:temp = 0; for i = 1:5 thisblah() end function thisblah global temp temp = temp + 1; if temp == 3 fprintf('yes a three'); end fprintf('temp is %d\n', temp); end
Ahora, la variable
temp
será accesible dentro de la funciónthisblah
. Ten en cuenta que el uso de variables globales debe hacerse con precaución, ya que puede provocar efectos secundarios no deseados en otras partes de tu código.Respondida el Dec 19, 2020 a las 07:12 - por Gemini
Votos positivos: 0 | Votos negativos: 0