es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo establecer el validador de tamaño de una propiedad de una clase a una constante conocida.

Me gustaría hacer algo como el siguiente código, donde las 3 propiedades son conocidas estáticamente como tamaño (1, 10) sin tener que volver a escribir explícitamente el 10 en la declaración de la propiedad.

classdef Example
    properties(Constant)
        length_of_vector = 10;
    end
    properties
        x_data(1, Example.length_of_vector);
        y_data(1, Example.length_of_vector);
        z_data(1, Example.length_of_vector);
    end
end

Esta sintaxis no es válida, ¿hay alguna manera de lograr esto sin volver a escribir el 10 en los tres lugares? Mi caso de uso real tiene varias dimensiones con tamaños conocidos estáticamente, y me gustaría poder especificar qué longitud tienen en la declaración para que los mantenedores sepan qué tamaño se espera, pero las constantes se puedan cambiar y se actualicen automáticamente todos los tamaños de propiedades que dependen de ellas.

Para aclarar, hay algunas alternativas que puedo hacer:

classdef Example
    properties(Constant)
        length_of_vector = 10;
    end
    properties
        % esto da el comportamiento en tiempo de ejecución que quiero pero no quiero tener que especificar el 10 literalmente
        x_data(1, 10);
        % esto da las condiciones iniciales correctas pero no es exactamente lo mismo
        y_data(1, :) = zeros(1,Example.length_of_vector);
        % esto es lo que estoy usando ahora, si cambias length_of_vector sin modificar el
        % 10 aquí lanza un error de inmediato para que te dirija a dónde tienes que corregirlo
        z_data(1, 10) = zeros(1,Example.length_of_vector);
    end
end

La diferencia entre estas opciones es que obj.x_data = pi, con tamaño establecido en (1,10), establece x_data como un vector de tamaño 1×10 donde cada elemento es pi, mientras que x.y_data = pi, que tiene tamaño (1,:), lo establece como un pi de tamaño 1×1, lo que significa que las funciones que esperan que las entradas tengan el mismo tamaño se rompen (y escribir el número literalmente en el tamaño es menos doloroso que refactorizar el código de inicialización que hace obj.z_data = 50; para iniciar la simulación a una altura dada).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay forma de lograr esto sin escribir explícitamente el 10 en los tres lugares. Sin embargo, como mencionaste, usar una variable constante en la declaración de propiedad y acoplarla con un mensaje de error si se modifica la constante puede ayudar a asegurar que los encargados de mantenimiento estén conscientes del tamaño esperado. Otra alternativa es documentar el tamaño esperado en la documentación de la clase.

Comments are closed.