В контексте проверки мы обычно передаем значения в функции, чтобы изолировать их как «единицы» от окружающего контекста.Тем не менее, с точки зрения программирования, статические поля тоже имеют свое применение.
Поскольку Dafny компилируется в платформу .NET, разумно ожидать некоторого способа предоставления статических переменных.
Например, для реализации шаблона Singleton я ожидал бы что-то вроде:
class A { constructor () {}
static var instance: A? := null;
static method getInstance() returns (r: A)
ensures A.instance() != null
{
if A.instance == null { var i := new A(); A.instance := i; }
r := A.instance;
}
}
Однако это приводит к ошибке Fields cannot be declared 'static'.
Есть ли способ выразить это (без использования неинтерпретированнойфункции, потому что это может работать только для целей проверки, но не будет генерировать полезный код).