Pergunta

Eu tenho o seguinte código no Specman que herdei:

some_method() is {
    var a: bool;

    if (!a) {
        a = some_other_method();
    };
};

O meu entendimento é que cada some_method() tempo é chamado, a é gerado de novo, e não há nenhum sentido em verificar o valor da a antes de ser atribuído. No entanto, pode ser que eu estou faltando alguma coisa aqui. Por exemplo, se a é estático, então este código faz sentido, o que me leva à minha pergunta:

Existe alguma maneira para uma variável a ser estática em Specman?

Foi útil?

Solução

não existem variáveis ??estáticas como em C. A variável em um método tem seu valor padrão (False neste caso) se não for inicializado, então você deve ser if (!a) direito deve ser sempre True.

As coisas seriam diferentes se a era um membro struct, então, como em outras linguagens OO que manteria lá o valor ao longo de várias chamadas de método ea verificação faria mais sentido:

struct some_struct_s {
    a : bool;
    some_method() is {
        if (!a) {
            a = some_other_method();
        };
    };
};

Você pode verificar coisas como esta também na interativo prompt:

Specman> var a : bool;
Specman> print a
  a = FALSE

Há a ajuda interativa também é bom, por exemplo tentativa:

Specman> help variable

e selecione a entrada (por número) sn_eref: variables : declaring. Lá você vai encontrar todas as informações relevantes para a sua pergunta.

Cheers, Daniel

Outras dicas

membros estáticos struct (eventos, campos, métodos) foram adicionados à linguagem em Specman v15.2. Um campo estático não pode ser gerado, física (%) ou utilizado em quando subtipos.

struct some_struct_s {
    a : bool;
    some_method() is {
        if (!a) {
            a = some_other_method();
        };
    };
};

-- Change field 'a' for all instances
on xxx { some_struct_s::a = TRUE; };

Eis alguns comentários do teamspecman blog: membros estáticos em e

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top