¿Qué scope
enSignificado de "ámbito" en D (para un parámetro)
void foo(scope void* p) { }
significa?
(. No estoy hablando de scope(exit)
o scope int x = 5;
, sino de scope
tal como se utiliza dentro de una lista de parámetros)
¿Qué scope
enSignificado de "ámbito" en D (para un parámetro)
void foo(scope void* p) { }
significa?
(. No estoy hablando de scope(exit)
o scope int x = 5;
, sino de scope
tal como se utiliza dentro de una lista de parámetros)
Hay 3 usos para scope
en D.
scope
declaraciones. Esto es cuando usa scope(success)
, scope(failure)
o scope(exit)
. Las instrucciones en el bloque siguiente se ejecutan cuando se sale del alcance en el que está la declaración scope
si no se lanza ninguna excepción, si se lanza una excepción, o independientemente de si se lanza una excepción para el éxito, el fracaso y la salida, respectivamente. Este uso de scope
se mantiene en el idioma.
scope
en una variable local. Esto pone la variable en la pila, incluso si es una clase. El objeto se destruye cuando sale del alcance. Este uso de scope
no es seguro y eventualmente se eliminará del idioma (aunque std.typecons.scoped lo reemplaza para aquellos que quieren vivir la vida peligrosamente).
scope
en un parámetro de función (que es el caso de uso del que está preguntando). Cuando se coloca en un parámetro que es un delegado, significa que las referencias a ese parámetro no pueden ser escapadas (es decir, asignadas a una variable global). Y cuando el compilador ve esto en los delegados, evitará asignar un cierre al tomar la dirección de una función local. Esto es esencial en los bucles opApply
(reference post on newsgroup). Actualmente, scope
no tiene ningún efecto en ningún parámetro de función que no sean delegados y se ignora para todos los demás tipos, aunque puede o no expandirse en algún momento en el futuro para afectar tipos como punteros para evitar que escapen de la función.
Cuando se utiliza en un parámetro de la función, la palabra clave in
es un alias para const scope
, que es con frecuencia la forma scope
en los parámetros de función se acostumbra inadvertidamente.
Buscando en el grupo de noticias digitales marte, me encontré con dos columnas semi-relacionado sobre el alcance en ese contexto: here y here.
Al leer esas dos publicaciones, el alcance del parámetro de función no parece hacer nada útil y está ahí para la compatibilidad con versiones anteriores. Incluso suena como versiones posteriores después de que D2 pudiera eliminar ese calificador por completo.
Estaba buscando el n. ° 3 ... ¡eso es increíble! Siempre me pregunté cómo hacerlo, ¡gracias! :) – Mehrdad
@Lambert: Parece que esto no estaba documentado en el sitio web de D, pero he emitido un informe, por lo que es probable que esto se agregue pronto a la documentación. –
@Andrej: ¡Genial, gracias! :) – Mehrdad