2012-01-26 8 views
5

No puedo entender cómo hacer algo tan simple como definir constantes usando otras.Cómo definir una constante usando otra en una clase de Matlab

Por ejemplo, un ejemplo ficticio:

classdef DummyClass < handle 
    properties (Constant) 
     NB_SECONDS_IN_MINUTE = 60; 
     NB_MINUTES_IN_HOUR = 60; 

     NB_SECONDS_IN_HOUR = NB_SECONDS_IN_MINUTE * NB_MINUTES_IN_HOUR; 
    end 
end 

Esto no funciona :(

Luego probé con esta línea:

NB_SECONDS_IN_HOUR = DummyClass.NB_SECONDS_IN_MINUTE * DummyClass.NB_MINUTES_IN_HOUR; 

pero que no funciona bien. ..

Alguien tiene una pista aquí?:/

(Estoy usando MATLAB R2009a por cierto)

+0

qué mensaje de error aparezca? –

+0

dijo "variable indefinida o clase DummyClass". Por cierto, Edric me dio la solución: simplemente olvidé que mi clase estaba en una subcarpeta, y en Matlab, uno tiene que usar el nombre completo de una clase (incluidos los subdirectorios) –

Respuesta

6

Definitivamente debe consultar las constantes con el nombre completo de la clase, como en su segundo caso. ¿Es DummyClass dentro de un directorio de paquete (+packagename)? Si es así, es necesario utilizar el nombre completo, es decir

NB_SECONDS_IN_HOUR = packagename.DummyClass.NB_SECONDS_IN_MINUTE * packagename.DummyClass.NB_SECONDS_IN_HOUR; 

EDIT: acabo de probar esto en R2009a:

>> ver matlab 
------------------------------------------------------------------------------------- 
[...] 
------------------------------------------------------------------------------------- 
MATLAB            Version 7.8  (R2009a) 
>> type DummyClass 

classdef DummyClass < handle 
    properties (Constant) 
     NB_SECONDS_IN_MINUTE = 60; 
     NB_MINUTES_IN_HOUR = 60; 

     NB_SECONDS_IN_HOUR = DummyClass.NB_SECONDS_IN_MINUTE * DummyClass.NB_MINUTES_IN_HOUR; 
    end 
end 

>> DummyClass.NB_SECONDS_IN_HOUR 
ans = 
     3600 
+1

Por lo tanto, depende de la ruta en la que codifica la clase? (¿y entonces no podemos reutilizar esta clase directamente en un proyecto anoter sin la misma estructura de directorios?) – Alexxx

+0

Solo importa si coloca DummyClass.m en un directorio MATLAB * package *, es decir, uno que comience con "+". Cuando lo haces, modificas el nombre completo de la clase. – Edric

Cuestiones relacionadas