J'ai trouvé l'alias de type ci-dessous dans un interpréteur Scheme que j'étudie. Lors de l'évaluation de l'AST, il reconnaît une fonction soit comme une fonction supportée nativement, soit comme une fonction définie par l'utilisateur. Je comprends la deuxième partie de la définition Enum
, mais la première partie me échappe.Qu'est-ce qu'une signature et un type de fonction?
pub enum Function {
Native(ValueOperation),
Scheme(Vec<String>, Vec<Value>, Rc<RefCell<Environment>>),
}
type ValueOperation = fn(&[Value], Rc<RefCell<Environment>>) -> Result<Value, RuntimeError>;
Comment fonctionne ce type d'alias? Est-ce que cette définition indique qu'un ValueOperation
est juste un raccourci pour une signature de fonction? Je n'ai pas trouvé de mention de cet idiome dans les docs/livres officiels.
Quel est le but de la définition d'un alias de type pour une signature de fonction? Que pouvez-vous "faire" avec? Est-ce une sorte de pointeur de fonction?
Les alias de type sont expliqués dans la section [Type Aliases du livre] (https://doc.rust-lang.org/book/type-aliases.html); Y at-il quelque chose à propos de ce qui n'est pas clair? –
Oui. A savoir, quel est le but de définir un alias de type pour une signature de fonction? Que pouvez-vous "faire" avec? Est-ce une sorte de pointeur de fonction? – neektza
Ce n'est pas une signature de fonction; c'est un type de pointeur de fonction. 'const X: i32 = 0;' est à 'i32' comme' fn f (i32) -> String {...} 'est' fn (i32) -> String'. C'est un type comme tout autre type. Tout ce que fait est de définir un type de pointeur de fonction avec la signature donnée. Qu'il y ait un alias de type n'est pas pertinent; ça ne change rien. –