Ответ 1
Для D scope
существует 3 варианта использования.
-
scope
. Это когда вы используетеscope(success)
,scope(failure)
илиscope(exit)
. Операторы в следующем блоке запускаются при выходе из области действия, в которой выполняется операторscope
, если не генерируется исключение, если выбрано исключение или независимо от того, выбрано ли исключение для успеха, неудачи и выхода соответственно. Это использованиеscope
остается на этом языке. -
scope
для локальной переменной. Это помещает переменную в стек - даже если это класс. Объект уничтожается, когда он покидает область видимости. Это использованиеscope
небезопасно и в конечном итоге будет удалено с языка (хотя std.typecons.scoped заменяет его для тех, кто хочет жить жизнью опасно). -
scope
по функциональному параметру (который является вариантом использования, о котором вы спрашиваете). При размещении на параметре, который является делегатом, это означает, что ссылки на этот параметр не могут быть экранированы (т.е. Назначены глобальной переменной). И когда компилятор видит это на делегатах, он избежит выделения замыкания при выборе адреса локальной функции. Это важно в циклеopApply
(справочного сообщения в новостной группе). В настоящее времяscope
не влияет на какие-либо параметры функции, отличные от делегатов, и игнорируется для всех других типов, хотя в будущем он может или не может быть расширен, чтобы влиять на такие типы, как указатели, чтобы предотвратить их выход из функции.
При использовании параметра функции ключевое слово in
является псевдонимом для const scope
, что часто происходит при неосторожном использовании scope
для параметров функции.