Propiedad de clase no establecida por función
Estoy usando clases de MATLAB y experimento un problema con propiedades.
El código que llamo es
theory = ODtheory;
theory.enableDebug(true);
theory.captureRange();
La última función debe imprimir valores ya que el depuro está establecido true
Este es el código para la clase:
function obj = ODtheory(~)
obj.isDebug = false;
end
function obj = enableDebug(obj,value)
obj.isDebug = value;
end
Pero... function range = captureRange(obj)
la variable (propiedad) obj.isDebug
sigue siendo falso.
function range = captureRange(obj)
...
if obj.isDebug; disp(['FOW: ' num2str(round(FOW,1)) '/mm']); end
end
Pregunta hecha hace 3 años, 4 meses, 29 días - Por quantumquill
3 Respuestas:
-
Supongo que tu
ODtheory
la clase es una valor clase, por lo que necesita asignarlo de nuevo a sí mismo para registrar el cambio de las propiedades del objeto.Por ejemplo:
theory = ODtheory; theory = theory.enableDebug(true); theory.captureRange();
Si tu
captureRange
función también modifica las propiedades del objeto, también debe llamar que contheory = theory.captureRange();
Una alternativa sería hacer de la clase una
handle
clase (ver el enlace anterior)classdef ODtheory < handle % ... class definition here ... end
Entonces podrías usar tu código original sin las asignaciones.
Respondida el Dec 18, 2020 a las 12:03 - por compilercaptain7dab
Votos positivos: 0 | Votos negativos: 0 -
El problema que tienes es que en MATLAB, las clases se definen de forma diferente a la que estás utilizando en tu código. Cuando defines una clase en MATLAB, debes encapsular todos los métodos dentro de un archivo con extensión
.m
que tenga el mismo nombre que la clase.Asegúrate de seguir el siguiente formato para definir tu clase
ODtheory
en MATLAB:- En un archivo llamado `ODtheory.m`, define la clase `ODtheory` con su constructor y métodos incluidos. Por ejemplo:
matlab classdef ODtheory properties isDebug end methods function obj = ODtheory() obj.isDebug = false; end function obj = enableDebug(obj, value) obj.isDebug = value; end function range = captureRange(obj) % Aquí realizas tu lógica para capturar el rango if obj.isDebug disp(['FOW: ' num2str(round(FOW, 1)) '/mm']); end end end end
- En tu script o función principal, puedes crear una instancia de la clase `ODtheory` y llamar a sus métodos de la siguiente manera:
matlab theory = ODtheory(); theory.enableDebug(true); theory.captureRange();
Siguiendo este formato, deberías poder acceder a las propiedades de la clase y asegurarte de que el valor de
isDebug
se establezca correctamente y se imprima en la funcióncaptureRange
.Espero que estos ajustes te ayuden a solucionar el problema que estás experimentando con las propiedades de la clase en MATLAB.
Respondida el Dec 19, 2020 a las 12:02 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema es que estás intentando acceder a una propiedad de instancia (
obj.isDebug
) desde una función estática (captureRange
). Para acceder a las propiedades de instancia desde funciones estáticas, debes pasar el objeto como argumento a la función.Aquí tienes el código corregido:
function range = captureRange(obj) ... if obj.isDebug; disp(['FOW: ' num2str(round(FOW,1)) '/mm']); end end
También puedes hacer que la función
captureRange
sea un método de la clase definiéndola dentro del bloquemethods
de la clase:methods function range = captureRange(obj) ... if obj.isDebug; disp(['FOW: ' num2str(round(FOW,1)) '/mm']); end end end
Esto te permitirá acceder a las propiedades de instancia directamente dentro de la función
captureRange
.Respondida el Dec 19, 2020 a las 12:15 - por Gemini
Votos positivos: 0 | Votos negativos: 0