El signo de exclamación aquí no es un operador, es solo una parte simbólica de la sintaxis explícita de creación de instancias de plantilla (descrita en detalle en here).
std.conv.to
(docs) es una plantilla de función para la conversión entre tipos arbitrarios. Se implementa por completo en la biblioteca y no tiene un soporte especial en el idioma. Tiene un alcance más amplio y diferente en comparación con el operador de elenco.
La plantilla to
toma dos parámetros de tipo; un tipo "para" y un tipo "de", en ese orden. En su ejemplo, la plantilla se instancia explícitamente con el argumento de tipo único ushort
para el parámetro "a", y un segundo argumento de tipo string
(suponiendo que args
proviene del primer parámetro a main
) se deduce automáticamente del argumento de función normal pasado al función (args[1]
) como el parámetro "desde".
La función resultante toma un parámetro de cadena y devuelve un ushort analizado de esa cadena, o arroja una excepción si falla. El operador de transmisión no intentará este tipo de conversión de alto nivel.
Tenga en cuenta que si hay más de un parámetro de plantilla explícita, o que el parámetro tiene más de un token en ella (ushort
es un único token de palabras clave), debe envolver la lista de parámetros de plantilla en paréntesis:
ushort result;
result = to!(typeof(result))(args[1]);
En este ejemplo, typeof
, (
, result
y )
son cuatro tokens separados y, por lo tanto, se requieren los paréntesis.
para responder a su última pregunta, el token !
también se utiliza para el operador unario no, no relacionado con ejemplificaciones plantilla:
bool yes = true;
bool no = !yes; // 'no' is false
muchas gracias =] ¡excelente respuesta! – thwd
¡Parece que también eso! es más un elenco léxico, por ejemplo,! string (f) es válido para el punto flotante fy el molde (cadena) f - no. –
Me gustaría señalar que técnicamente hablando 'to! Ushort (val)' no es realmente un elenco. Es una conversión usando la función 'std.conv.to'. Se verifica, pero si comienzas a llamarlo yeso, te arriesgas a causar confusión. La conversión solo se realiza con el operador de transmisión. –