2011-01-17 5 views

Respuesta

22

Hay 3 usos para scope en D.

  1. 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.

  2. 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).

  3. 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.

+1

Estaba buscando el n. ° 3 ... ¡eso es increíble! Siempre me pregunté cómo hacerlo, ¡gracias! :) – Mehrdad

+0

@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. –

+0

@Andrej: ¡Genial, gracias! :) – Mehrdad

0

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.

Cuestiones relacionadas