2011-06-13 13 views
6

Este código parece compilarse bien en el IDE, pero el compilador de línea de comandos (SDK 4.5 mxmlc.exe) informa "El inicializador del parámetro es desconocido o no es una constante en tiempo de compilación".Usar constantes como valores de parámetros predeterminados en las interfaces: IDE está bien pero mxmlc falla?

senocular da una buena explicación y quizás una solución alternativa, pero estoy esperando algo más elegent (como una instrucción de línea de comandos).

package { 
    public class Constants { 
     public static const CONSTANT : int = 0; 
    } 
} 


package { 
    public interface IInterface { 
      function foo(param : int = Constants.CONSTANT) : void; 
    } 
} 

package 
{ 
    public class Concrete implements IInterface 
    { 
      public function foo(param:int=Constants.CONSTANT):void 
      {   
      } 
    } 
} 
+1

¿Tal vez podría probar las constantes de configuración? http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html – cmann

+0

Lo único que se me ocurre es crear su propia secuencia de comandos de tipo de proceso por lotes para procesar previamente la fuente antes de que se obtenga el compilador eso, pero esa no es probablemente la mejor idea. Sin embargo, funcionaría, suponiendo que obtuvieras todos los errores :) – Scott

Respuesta

2

Según Senocular, se trata de la orden de compilación. No hay una forma explícita de establecer este orden.

Puede definir las constantes en línea utilizando la opción del compilador define para evitar este problema.

Otra forma sería crear una biblioteca que contenga las constantes. Las bibliotecas están incluidas antes de las clases de usuario. Para crear una biblioteca de utilizar el component compiler:

compc -output lib\Constants.swf -source-path src -include-classes Constants 

Al compilar la aplicación, incluyen esa biblioteca:

mxmlc -include-libraries lib\Constants.swf -- src\Main.as 

Pero no se olvide de volver a compilar la biblioteca cuando las constantes de cambiar o usar una acumulación script que se ocupa de eso.


Un breve comentario sobre el código de ejemplo:
La interfaz no tiene que utilizar esa constante, cualquier valor va a hacer y tener el mismo efecto sobre la implementación de clases.

Programming AS3 - Interfaces

Un método que implementa tal declaración función debe tener un valor de parámetro predeterminado que es un miembro del mismo tipo de datos que el valor especificado en la definición de interfaz, pero el valor real no tiene para que coincida

Cuestiones relacionadas