2009-05-25 15 views
1

私は継承specmanに次のコードを持っている:私の理解では、毎回some_method()が呼び出されるということですspecmanには静的変数がありますか?

some_method() is { 
    var a: bool; 

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

aが新たに生成され、それが割り当てられている前には意味がaの値をチェックするにはありません。しかし、私はここで何かを逃している可能性があります。たとえば、aが静的​​な場合、このコードは意味があります。これは私の質問につながります。

specmanで変数を静的にする方法はありますか?

答えて

3

Cのような静的変数はありません。メソッド内の変数は、初期化されていなければデフォルト値(この場合はFalse)を持ちますので、if (!a)は常にTrueである必要があります。

物事はaは、構造体のメンバーだった場合は、その後、他のオブジェクト指向言語のように、それはいくつかのメソッド呼び出しの上にあった値を保持してしまうと、チェックがより理にかなって異なるだろう。

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

あなたが好きなものを確認することができますこれはまた、対話プロンプト上:

Specman> help variable 
0:あり

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

インタラクティブヘルプは、例えばしてみてください、いいです

と入力して(番号で)sn_eref: variables : declaringを選択します。そこにあなたの質問に関するすべての関連情報があります。

乾杯、 ダニエル

0

静的構造体のメンバ(イベント、フィールド、メソッド)はSpecmanのv15.2での言語に追加されました。静的フィールドは生成できません。物理タイプ(%)またはサブタイプの場合に使用されます。 Static members in e

:ここ

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; }; 

はteamspecmanのブログからいくつかのコメントです

関連する問題